HDU 1269 -- 迷宫城堡【有向图求SCC的数目 && 模板】
来源:互联网 发布:爸爸的网络用语是什么 编辑:程序博客网 时间:2024/05/18 01:53
迷宫城堡
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9893 Accepted Submission(s): 4433
Problem Description
为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以通过这个通道由A房间到达B房间,但并不说明通过它可以由B房间到达A房间。Gardon需要请你写个程序确认一下是否任意两个房间都是相互连通的,即:对于任意的i和j,至少存在一条路径可以从房间i到房间j,也存在一条路径可以从房间j到房间i。
Input
输入包含多组数据,输入的第一行有两个数:N和M,接下来的M行每行有两个数a和b,表示了一条通道可以从A房间来到B房间。文件最后以两个0结束。
Output
对于输入的每组数据,如果任意两个房间都是相互连接的,输出"Yes",否则输出"No"。
Sample Input
3 31 22 33 13 31 22 33 20 0
Sample Output
YesNo
#include <cstdio>#include <cstring>#include <algorithm>#define maxn 10000 + 100#define maxm 100000 + 1000using namespace std;int n, m;struct node {int u, v, next;};node edge[maxm];int head[maxn], cnt;int low[maxn], dfn[maxn];int dfs_clock;int Stack[maxn];bool Instack[maxn];int top;int Belong[maxn] , scc_clock;void init(){cnt = 0;memset(head, -1, sizeof(head));}void addedge(int u, int v){edge[cnt] = {u, v, head[u]};head[u] = cnt++;}void getmap(){ while(m--){ int a, b; scanf("%d%d", &a, &b); addedge(a, b); }}void tarjan(int u, int per){ int v; low[u] = dfn[u] = ++dfs_clock; Stack[top++] = u; Instack[u] = true; int have = 1; for(int i = head[u]; i != -1; i = edge[i].next){ v = edge[i].v; if(v == per && have){ have = 0; continue; } if(!dfn[v]){ tarjan(v, u); low[u] = min(low[v], low[u]); } else if(Instack[v]){ low[u] = min(low[u], dfn[v]); } } if(dfn[u] == low[u]){ scc_clock++; do{ v = Stack[--top]; Instack[v] = false; Belong[v] = scc_clock; }while(u != v); }}void find(){ memset(low, 0, sizeof(low)); memset(dfn, 0, sizeof(dfn)); memset(Instack, false, sizeof(Instack)); memset(Belong, 0, sizeof(Belong)); dfs_clock = scc_clock = top = 0; for(int i = 1; i <= n; ++i){ if(!dfn[i]) tarjan(i, i); }}void solve(){ if(scc_clock == 1) printf("Yes\n"); else printf("No\n");}int main (){while(scanf("%d%d", &n, &m), n || m){ init(); getmap(); find(); solve();}return 0;}
1 0
- HDU 1269 -- 迷宫城堡【有向图求SCC的数目 && 模板】
- hdu 1296 迷宫城堡【有向图scc+Tarjan入门】
- hdoj 1269 迷宫城堡 【有向图SCC 入门题目】
- hdu 1269 迷宫城堡 tarjan算法求有向图的强连通分量
- hdoj 迷宫城堡 1269 (有向图SCC) 入门题
- HDU 1269 迷宫城堡 (tarjan scc)
- 迷宫城堡 【求SCC 个数】
- HDU OJ 1269 迷宫城堡【有向图强连通分量的Tarjan算法 入门】
- HDU 1269 迷宫城堡 (有向图的强连通分量)
- hdu1269 迷宫城堡 (强连通模板)(有向图)
- HDU 1269 迷宫城堡 (有向图强连通分量Tarjan)
- 有向图和无向图的连通性学习小记 Poj 1269 迷宫城堡
- HDU_P1269 迷宫城堡(有向图的强连通分量)
- 【图的连通性】迷宫城堡 HDU 1269
- 【有向图的强连通分】HDUOJ 1269 迷宫城堡(Kosaraju算法+Tarjan算法)
- 【tarjan模板】HDU 1269 迷宫城堡
- 迷宫城堡 - HDU 1269 Tarjan 模板题
- hdu 1269 迷宫城堡 tarjan模板
- Linux LVS-NAT实例演示
- 欢迎使用CSDN-markdown编辑器
- 最大record对应数据的取得
- 在本机用wamp和花生壳搭建php网页,其他人能访问
- JS操作cookie
- HDU 1269 -- 迷宫城堡【有向图求SCC的数目 && 模板】
- ssh 不能update del add
- win10系统设置锁屏界面时不能成功的解决办法
- 打开Myeclipse时进度条只进行十分之一就闪退的解决办法
- 虚函数
- ObjC第六节:OC常用类
- Java中各种修饰符与访问修饰符的说明
- poj2253 最小生成树中的最大边 prim
- ssh 反向隧道