迷宮城堡HDU1269 (強連通專題)

2021-09-25 14:23:15 字數 1203 閱讀 4293

原題目:

為了訓練小希的方向感,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 22 3

3 13 3

1 22 3

3 20 0

sample output

yes

no

#include#include#include#include#includeusing namespace std;

vectoruv[10005];

vectorvu[10005];

int vis[10005];

int n,m,cnt;

int u,v;

void dfs(int u)

{ vis[u]=1;

cnt++;

int len1=uv[u].size();

for(int i=0;i思路:

思路1:按正向邊dfs一遍,將經過的節點計數,如果記錄的節點的個數小於n,那麼就說明圖按照正向邊就不是連同的,所以就不是強連通圖!

然後按照反向邊再進行另乙個dfs,同樣對經過的節點的個數進行計數,如果個數==n則說明正向遍歷和反響遍歷都是連通的!那麼整個圖就是強連通的圖!

強連通圖(strongly connected graph)定義:是指在有向圖g中,如果對於每一對vi、vj,vi≠vj,從vi到vj和從vj到vi都存在路徑,則稱g是強連通圖。有向圖中的極大強連通子圖稱做有向圖的強連通分量。

其實這個思路並沒有用到強連通的演算法,只是用dfs利用了強連通的特性來解決的。

思路2:直接套用tarjan演算法,求出每乙個節點所對應的縮點的值, 如果縮點的個數==1,那麼證明就會只有乙個強連通分量!也就是強連通圖

hdu 1269 迷宮城堡(強連通)

題意 給定乙個有向圖,求該圖是不是強連通的。思路 從某點出發,正向和反向兩次遍歷圖,如果都能到達所有點,則該圖是強連通的。強連通 在乙個有向圖g中,如果任意兩點v1 v2存在v1到v2和v2到v1的路徑,則稱該圖是強連通的。include include define n 10005 define ...

迷宮城堡hdu1269(強連通tarjan)

為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間 n 10000 和m條通道 m 100000 每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gardon需要請你寫個程式確認一下是否任意兩...

HDU 1269 迷宮城堡 強連通分量

一道強連通分量的裸題,當只有乙個強連通分量的時候輸出yes,否則輸出no include include include include include include include include include include include using namespace std typed...