1. 程式人生 > >HDU 1269 迷宮城堡

HDU 1269 迷宮城堡

tom content 說明 tput mission 路徑 other total ott

迷宮城堡

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17371 Accepted Submission(s): 7615

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 3 1 2 2 3 3 1 3 3 1 2 2 3 3 2 0 0 Sample Output Yes No Author Gardon Source HDU 2006-4 Programming Contest Recommend lxj | We have carefully selected several similar problems for you: 1233 1142 1217 1162 1102
#include<iostream>
#include
<cstdio> #include<cstring> #include<algorithm> #define MAXN 100000+15 using namespace std; int n,m,tot,tim,top,sumcol; int to[MAXN],from[MAXN],net[MAXN],col[MAXN]; int dfn[MAXN],low[MAXN],vis[MAXN],stack[MAXN],visstack[MAXN]; void add(int u,int v){ to[++tot]=v;net[tot]=from
[u];from[u]=tot; } void tarjin(int now){ low[now]=dfn[now]=++tim; stack[++top]=now; visstack[now]=1; vis[now]=1; for(int i=from[now];i;i=net[i]) if(visstack[to[i]]) low[now]=min(low[now],dfn[to[i]]); else if(!vis[to[i]]){ tarjin(to[i]); low[now]
=min(low[now],low[to[i]]); } if(dfn[now]==low[now]){ sumcol++; col[now]=sumcol; while(stack[top]!=now){ col[stack[top]]=sumcol; visstack[stack[top]]=0; top--; } visstack[now]=0; top--; } } int main(){ while(cin>>n>>m){ if(n==0&&m==0) break; top=0;tot=0;sumcol=0;tim=0; memset(to,0,sizeof(to)); memset(low,0,sizeof(low)); memset(dfn,0,sizeof(dfn)); memset(vis,0,sizeof(vis)); memset(col,0,sizeof(col)); memset(net,0,sizeof(net)); memset(from,0,sizeof(from)); memset(stack,0,sizeof(stack)); memset(visstack,0,sizeof(visstack)); for(int i=1;i<=m;i++){ int a,b; cin>>a>>b; add(a,b); } for(int i=1;i<=n;i++) if(!vis[i]) tarjin(i); if(sumcol==1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } }

HDU 1269 迷宮城堡