強連通分量 迷宮城堡

2022-08-18 06:42:14 字數 1585 閱讀 7897

【題目描述】

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

10using

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...