HDU1269迷宮城堡(Tarjan模板題)

2021-07-29 23:30:14 字數 889 閱讀 6969

題目大意:

問乙個圖是不是強連通的。

tarjan模板+詳細解釋:

#include#include#include#includeusing namespace std;

const int maxn = 10010;

const int maxm = 100010;

int n, m;

int cnt, tol, scnt, top;

int head[maxn], st[maxn], dfn[maxn], low[maxn], belong[maxn];

//dfn為深搜次序陣列

//low[u]為u結點或者u的子樹結點所能追溯到的最早棧中結點的次序號

//belong為每個結點所對應的強連通分量標號陣列

bool instack[maxn];

struct edge

edge[maxm];

void init()

void build_graph(int u, int v)//構建鄰接表

void tarjan(int u)//tarjan演算法求有向圖的強連通分量

else if(instack[v]&&dfn[v] < low[u])//如果v結點在棧內

low[u] = dfn[v];

}if(dfn[u] == low[u])

while(t != u);//直到將v從棧中退出

}}void solve()

int main()

solve();

if(scnt == 1)

puts("yes");

else

puts("no");

}return 0;

}

HDU 1269 迷宮城堡

強連通分量,這題幾乎沒有除錯就ac了。第一次寫tarjan,真順利,其實可以再優化的,只要求出兩個以上的強連通分量就可以直接輸出no了,而不用再繼續算下去 include include include include include include include includeusing nam...

HDU 1269 迷宮城堡

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

hdu 1269 迷宮城堡

根據題意,容易看出,這道題就是要求判斷該圖是否強連通,即只有乙個強連通分量,這樣的話,我們直接對圖運用tarjan演算法,求出圖中強連通分量的個數,只有乙個強連通分量就說明該圖強連通,否則該圖不強連通。這道題算是tarjan 的模板題 include include include include ...