迷宮城堡hdu1269(強連通tarjan)

2021-09-11 14:50:19 字數 1978 閱讀 8295

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

2 33 1

3 31 2

2 33 2

0 0sample output

yesno

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

const

int mod=

1000000007

;const ll max=

9999999999

;int dp[

25600

],date[

110]

;stack<

int>ss;

set<

int>s;

map<

int,

int>mp;

vector<

int>v[

400000];

int f[

400000

],cnt;

int dir[4]

[2]=

;char maps[

700]

[700];

int head[

30000

],top,num,line;

struct node

edge[

300000];

int dfn[

11000

],vis[

11000

],low[

11000

],ans,sta[

11000];

void

init()

void

add(

int u,

int v)

void

tarjan

(int u)

else

if(vis[v]

) low[u]

=min

(dfn[u]

,low[v]);

}if(low[u]

==dfn[u]

) vis[sta[top]]=

0;top--

; ans++;if

(ans>=2)

return;}

return;}

intmain()

for(i=

1;i<=n;i++)if

(!dfn[i]

)tarjan

(i);

if(ans==1)

printf

("yes\n");

else

printf

("no\n");

}return0;

}

hdu 1269 迷宮城堡(強連通)

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

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

原題目 為了訓練小希的方向感,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...