poj 2553 (tarjan求强连通分量+缩点)
来源:互联网 发布:网络计算机组成 编辑:程序博客网 时间:2024/05/21 12:05
题目大意: 给定一个n个点的有向图( 1<=n<=5000 ),要求你输出所有满足条件的点,条件是点在 出度为0的强连通分量里,点要按标号大小升序输出。tarjan太强大了,,Source CodeProblem: 2553User: 1013101127Memory: 808KTime: 266MSLanguage: C++Result: AcceptedSource Code#include<iostream>#include<cstdio>#include <cmath>#include <vector>#include <stack>;#include<cstring>using namespace std;const int nMax=5005;const int mMax=9000005;int n,m;vector<int >mp[nMax];stack<int>mystack;int dfn[nMax];int low[nMax];int vis[nMax];int tmp;int belong[nMax];int cnt;int out[nMax];void tarjan(int u){ dfn[u]=low[u]=tmp; tmp++; vis[u]=1; mystack.push(u); for(int i=0;i<mp[u].size();i++) { int v=mp[u][i]; if(!dfn[v]) { tarjan(v); low[u]=min(low[u],low[v]); } else if(vis[v]) { low[u]=min(dfn[v],low[u]); } } if(low[u]==dfn[u]) { ++cnt; int v; do { v=mystack.top(); mystack.pop(); vis[v]=0; belong[v]=cnt; }while(v!=u); }} void dfs(int u) { vis[u]=1; for(int i=0;i<mp[u].size();++i) { int v= mp[u][i]; if( belong[u] != belong[v] ) out[ belong[u] ]++; if( !vis[v] ) dfs( v ); } }int main(){ while(cin>>n){ if(!n)break; cin>>m; int u,v; tmp=1; cnt=0; memset(vis,0,sizeof(vis)); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(out,0,sizeof(out)); for(int i=1;i<=n;i++) mp[i].clear(); while(!mystack.empty()) mystack.pop(); for(int i=0;i<m;i++) { cin>>u>>v; mp[u].push_back(v); } for(int i=1;i<=n;i++) { if(!dfn[i]) tarjan(i); } memset(vis,0,sizeof(vis)); memset(out,0,sizeof(out)); for(int i=1;i<=n;++i) { if( !vis[i] ) dfs(i); } vector<int>ans; ans.clear(); for(int i=1;i<=n;++i) if( out[ belong[i] ] == 0 ) ans.push_back( i ); for(int i=0;i<ans.size();++i) printf("%d%c", ans[i], i==ans.size()-1 ? '\n' : ' ' ); } return 0;}
题目大意:
给定一个n个点的有向图( 1<=n<=5000 ),要求你输出所有满足条件的点,条件是点在 出度为0的强连通分量里,点要按标号大小升序输出。
tarjan太强大了,,
Source Code
Problem: 2553 User: 1013101127Memory: 808K Time: 266MSLanguage: C++ Result: Accepted- Source Code
#include<iostream>#include<cstdio>#include <cmath>#include <vector>#include <stack>;#include<cstring>using namespace std;const int nMax=5005;const int mMax=9000005;int n,m;vector<int >mp[nMax];stack<int>mystack;int dfn[nMax];int low[nMax];int vis[nMax];int tmp;int belong[nMax];int cnt;int out[nMax];void tarjan(int u){ dfn[u]=low[u]=tmp; tmp++; vis[u]=1; mystack.push(u); for(int i=0;i<mp[u].size();i++) { int v=mp[u][i]; if(!dfn[v]) { tarjan(v); low[u]=min(low[u],low[v]); } else if(vis[v]) { low[u]=min(dfn[v],low[u]); } } if(low[u]==dfn[u]) { ++cnt; int v; do { v=mystack.top(); mystack.pop(); vis[v]=0; belong[v]=cnt; }while(v!=u); }} void dfs(int u) { vis[u]=1; for(int i=0;i<mp[u].size();++i) { int v= mp[u][i]; if( belong[u] != belong[v] ) out[ belong[u] ]++; if( !vis[v] ) dfs( v ); } }int main(){ while(cin>>n){ if(!n)break; cin>>m; int u,v; tmp=1; cnt=0; memset(vis,0,sizeof(vis)); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(out,0,sizeof(out)); for(int i=1;i<=n;i++) mp[i].clear(); while(!mystack.empty()) mystack.pop(); for(int i=0;i<m;i++) { cin>>u>>v; mp[u].push_back(v); } for(int i=1;i<=n;i++) { if(!dfn[i]) tarjan(i); } memset(vis,0,sizeof(vis)); memset(out,0,sizeof(out)); for(int i=1;i<=n;++i) { if( !vis[i] ) dfs(i); } vector<int>ans; ans.clear(); for(int i=1;i<=n;++i) if( out[ belong[i] ] == 0 ) ans.push_back( i ); for(int i=0;i<ans.size();++i) printf("%d%c", ans[i], i==ans.size()-1 ? '\n' : ' ' ); } return 0;}
- poj 2553 (tarjan求强连通分量+缩点)
- Tarjan求强连通分量 缩点
- POJ 1236 Network of Schools (Tarjan算法求强连通分量+缩点) 代码详解
- POJ 1236 (Tarjan求强连通分量)
- tarjan算法缩点&&求强连通分量【转载】
- POJ 2762 强连通分量 Tarjan + 缩点
- POJ 1236(tarjan 强连通分量 缩点)
- POJ-tarjan-强连通分量+缩点-Popular Cows
- POJ 2186 Popular Cows tarjan缩点 强连通分量
- poj 2186 tarjan求强连通分量(模板题)
- POJ2186 Tarjan强连通分量+缩点
- tarjan强连通分量缩点笔记
- Tarjan算法(求强连通分量)
- tarjan 算法(求强连通分量)
- tarjan模板(缩点,求有向图强连通分量)
- POJ 2553 强连通分量 Tarjan
- POJ 2553 The Bottom of a Graph 强连通分量+缩点 tarjan or kosaraju
- poj 2553(3180) tarjan强连通分量(找图的“sink”点)
- 解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
- Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线
- system() exec() passthru()
- TCP三次握手
- 图形化排序算法
- poj 2553 (tarjan求强连通分量+缩点)
- 设计模式(一)——策略模式
- 光学变焦----景深=景深远界-景深近界
- 实习第八天——轻松的一天
- HTTP请求(GET与POST区别)和响应
- linux screen分屏后台运行console
- JPA中级联(casecade)与关联关系的方向有关吗?
- dede标签调用大全 dedecms 隔五行一个分割线
- Android自动测试代码