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