題目傳送門
迷宮城堡
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 3
3 13 3
1 22 3
3 20 0
sample output
yesno思路
tarjan強連通模板題,深入理解tarjan演算法。對於這道題只需要求有幾個連通分量即可,如果只有乙個連通分量說明可以互相到達,否則不能。唯一的小坑就是圖可能不連通吧,把tarjan放在迴圈裡就好了。
dfn陣列記錄訪問時間戳
low陣列記錄能訪問到的最早祖先的時間序
願你走出半生,歸來仍是少年~#include
#include
#include
#include
#include
using
namespace std;
const
int maxn =
10005
;struct edgee[maxn*10]
;stack<
int>s;
int head[maxn]
;int dfn[maxn]
;int low[maxn]
;bool visited[maxn]
;int scc,cnt,tot;
inline
void
clear_set()
inline
void
tarjan
(int x)
else
if(visited[y])}
if(low[x]
== dfn[x])}
}}inline
void
addedge
(int x,
int y)
intmain()
for(
int i =
1;i <= n;i++)}
if(scc ==1)
else
}return0;
}
HDU 1269 迷宮城堡
強連通分量,這題幾乎沒有除錯就ac了。第一次寫tarjan,真順利,其實可以再優化的,只要求出兩個以上的強連通分量就可以直接輸出no了,而不用再繼續算下去 include include include include include include include includeusing nam...
HDU 1269 迷宮城堡
為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間 n 10000 和m條通道 m 100000 每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gardon需要請你寫個程式確認一下是否任意兩...
hdu 1269 迷宮城堡
根據題意,容易看出,這道題就是要求判斷該圖是否強連通,即只有乙個強連通分量,這樣的話,我們直接對圖運用tarjan演算法,求出圖中強連通分量的個數,只有乙個強連通分量就說明該圖強連通,否則該圖不強連通。這道題算是tarjan 的模板題 include include include include ...