poj 2762(强连通+判断链)
来源:互联网 发布:mac平台 编辑:程序博客网 时间:2024/05/16 05:11
题目链接:http://poj.org/problem?id=2762
思路:首先当然是要缩点建新图,由于题目要求是从u->v或从v->u连通,显然是要求单连通了,也就是要求一条长链了,最后只需判断链长是否等于新图顶点个数即可,至于如何求一条链长,直接dfs即可,注意点就是dfs是要从入度为0的顶点开始。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stack> 6 #include<vector> 7 using namespace std; 8 #define MAXN 1010 9 10 int low[MAXN],dfn[MAXN],color[MAXN];11 bool mark[MAXN];12 int to[MAXN];13 int n,m,cnt,_count,ans;14 15 vector<vector<int> >map;16 vector<vector<int> >Graph;17 stack<int>S;18 19 void Tarjan(int u)20 {21 low[u]=dfn[u]=++cnt;22 mark[u]=true;23 S.push(u);24 for(int i=0;i<map[u].size();i++){25 int v=map[u][i];26 if(dfn[v]==0){27 Tarjan(v);28 low[u]=min(low[u],low[v]);29 }else if(mark[v]){30 low[u]=min(low[u],dfn[v]);31 }32 }33 if(low[u]==dfn[u]){34 int v;35 _count++;36 do{37 v=S.top();38 S.pop();39 mark[v]=false;40 color[v]=_count;41 }while(u!=v);42 }43 }44 45 void dfs(int u)46 {47 mark[u]=true;48 for(int i=0;i<Graph[u].size();i++){49 int v=Graph[u][i];50 if(!mark[v]){ 51 ans++;52 dfs(v); 53 return ;54 }55 }56 }57 58 int main()59 {60 int u,v,_case;61 scanf("%d",&_case);62 while(_case--){63 scanf("%d%d",&n,&m);64 map.clear();Graph.clear();65 map.resize(n+2);Graph.resize(n+2);66 cnt=_count=0;67 for(int i=1;i<=m;i++){68 scanf("%d%d",&u,&v);69 map[u].push_back(v);70 }71 memset(dfn,0,(n+2)*sizeof(int));72 memset(to,0,(n+2)*sizeof(int));73 memset(mark,false,(n+2)*sizeof(bool));74 for(int i=1;i<=n;i++){75 if(dfn[i]==0)Tarjan(i);76 }77 for(int i=1;i<=n;i++){78 for(int j=0;j<map[i].size();j++){79 if(color[i]!=color[map[i][j]]){80 Graph[color[i]].push_back(color[map[i][j]]);81 to[color[map[i][j]]]++;82 }83 }84 }85 ans=1;86 for(int i=1;i<=_count;i++){87 if(to[i]==0){ dfs(i);break; }88 }89 (ans==_count)?puts("Yes"):puts("No");90 }91 return 0;92 }
0 0
- poj 2762(强连通+判断链)
- poj 2762 强连通
- POJ 2762 强连通 + 缩点+判断入度出度
- POJ 2762 Going from u to v or from v to u? 强连通+判断链
- poj 2762 强连通分量+拓扑排序(判断图是否为单向连通)
- poj2762强连通分量+判断单链
- 判断强连通图
- poj 2186 强连通分量缩点+判断出度
- POJ 1904 强连通
- poj 3137(强连通)
- poj-1236 强连通
- poj 2553 强连通
- poj 2553 强连通
- poj 1904 强连通
- poj 2186 强连通
- poj 2762(弱连通:强连通+缩点+拓扑排序)
- POJ 2186 强连通分量
- poj 1904 强连通图
- poj 1733(带权并查集+离散化)
- poj 2349(最小生成树应用)
- poj 3522(最小生成树应用)
- poj 3228(二分+最大流)
- poj 3352(边双连通分量)
- poj 2762(强连通+判断链)
- poj 3114(强连通缩点+SPFA)
- poj 3159(差分约束经典题)
- poj 1062(有限制的最短路)
- CocoStudio 加载多个帧动画出现只能使用一个帧动画的原因
- poj 1511(SPFA+邻接表)
- poj 1724(有限制的最短路)
- poj 1797(最短路变形)
- hdu 4618(最大回文子矩阵)