【題目描述】
為了訓練小希的方向感,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"。
【分析】
強連通分量模板,tarjan跑一邊,,看sum是不是1就可以了。
【**】
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 910using
namespace
std;
1112
#define ms(a,b) memset(a,b,sizeof(a))
1314
const
int maxn=10010;15
const
int maxm=100010;16
17struct
edgeedge[maxm<<1
];20
21int
vis[maxn],dfn[maxn],low[maxn],belong[maxn],stack[maxn];
22int
head[maxm];
23int
top,sum,dep,nedge,n,m;
2425 inline int
read()
2629
while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
30return w?-x:x;31}
3233
void add_edge(int a,int
b)34
; head[a]=nedge++;36}
3738
void tarjan(int
u)39
51else
5255}56
intj;
57if (dfn[u]==low[u])
5865
while (u!=j);66}
67}6869
void
init()
7079
80int
main()
8192
for (int i=1;i<=n;i++)
9396
if (sum>1) printf("
no\n");
97else printf("
yes\n");
98}99return0;
100 }
迷宮城堡 最大強連通分量
problem description 為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間 n 10000 和m條通道 m 100000 每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gar...
HDU 1269 迷宮城堡 強連通分量
一道強連通分量的裸題,當只有乙個強連通分量的時候輸出yes,否則輸出no include include include include include include include include include include include using namespace std typed...
hdu 1269 迷宮城堡 強連通分量
problem 給乙個有向圖,問這個圖是否兩兩都可互相達。solution 求強連通分量,看一共有幾個強連通分量,如果只有乙個則兩兩可互相達。include include include include include include include include include include...