傳送門:hdu-1269
為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間(n<=10000)和m條通道(m<=100000),每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gardon需要請你寫個程式確認一下是否任意兩個房間都是相互連通的,即:對於任意的i和j,至少存在一條路徑可以從房間i到房間j,也存在一條路徑可以從房間j到房間i。
輸入包含多組資料,輸入的第一行有兩個數:n和m,接下來的m行每行有兩個數a和b,表示了一條通道可以從a房間來到b房間。檔案最後以兩個0結束。
對於輸入的每組資料,如果任意兩個房間都是相互連線的,輸出」yes」,否則輸出」no」。
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
4849
5051
5253
5455
5657
5859
60
#includeusing
namespace
std;
#define rep(i,a,n) for(int i=a;i
#define repd(i,a,n) for(int i=n-1;i>=a;i--)
#define crl(a,x) memset(a,x,sizeof(a))
const
int n=1e5+5;
int dfn[n],low[n],clock,begin[n],ans;bool instack[n];
struct
node; //鏈式向前星存圖
vector
edge;
stack
s;void
init
()void
tarjan
(int u)
else
if(instack[edge[i].to])
low[u]=min(low[u],dfn[edge[i].to]);
}if(dfn[u]==low[u])while(tem!=u);}}
intmain
());
begin[a]=edge.size()-1;
}rep(i,1,n+1)
if(!dfn[i]) tarjan(i); //tarjan
puts(ans==1? "yes":"no"); //聯通分支數是否為1
}return0;}
迷宮城堡 Tarjan
為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間 n 10000 和m條通道 m 100000 每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gardon需要請你寫個程式確認一下是否任意兩...
迷宮城堡 tarjan演算法
為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間 n 10000 和m條通道 m 100000 每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gardon需要請你寫個程式確認一下是否任意兩...
HDU1269 迷宮城堡(Tarjan)
題目 我是超連結 題解 就是個模板題啊 按理說應該有兩種方法 1 kobalabala 從任意乙個點開始,如果可以遍歷到所有點,而且,反置邊之後依然可以遍歷到所有點那就是yes 否則就是no 但這個方法蜜汁不對?2 tarjan.include include include using names...