tarjan求強連通分量(模板)

2022-03-16 14:57:20 字數 1002 閱讀 2007

#include#include

#include

using

namespace

std;

const

int maxn=50010

;int

pre[maxn],other[maxn],last[maxn],l;

intn,m;

intdfn[maxn],low[maxn],ans[maxn],st[maxn],belong[maxn],cnt,top,qw;

//dfn->dfs序,low是點上非樹邊指向的點(擁有最小的dfs序 ),st是乙個棧,記錄環上的點,belong是點所屬於的環

void add(int x,int

y)int ru[maxn],chu[maxn];//

入度,出度

void dfs(int

x)

else

if(ru[v])//

兒子不在環上,因為環上的點low是沒有意義的

}if(dfn[x]==low[x])//

說明這是乙個環

}}int

main()

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)}}

int p=0;//

因為要所有牛都喜歡,所以只允許乙個環的出現

for(int i=1;i<=qw;i++)

p=i;}}

printf(

"%d\n

",ans[p]);

return0;

}/*tarjan求強連通分量;

這個板子就是在乙個有向圖中,找到乙個所有點直接或間接指向的乙個點

(實際上可以是乙個環,可以想象乙個有向環,上面有許多「枝條」,

這樣所有環上的點都直接或間接指向環上的點,然後所有枝條上的點都直接或間接指向環上的點;

那麼環上的點就是那些所有點都直接或間接指向的)

*/

模板 tarjan求強連通分量

大約是今年4月學的演算法了,後來5月的時候做題還寫了乙個退化的tarjanqaq。時間複雜度 o n m 用途 有向圖縮環 1 include 2 include3 include4 include5 include6 include7 include8 include9 include10 inc...

Tarjan模板 求強連通分量

tarjan求強連通分量的流程在這個部落格講的很清楚,再加上我也沒理解透,這裡就不寫了。縮點 將同乙個連通塊內的點視為同乙個點。扔一道模板題 codevs2822愛在心中 第一問很顯然就是求點數大於一的連通塊的個數,跑一次tarjan 第二問腦補一下發現,縮點後,若圖中有且僅有乙個點出度為0且為愛心...

強連通分量 tarjan求強連通分量

雙dfs方法就是正dfs掃一遍,然後將邊反向dfs掃一遍。挑戰程式設計 上有說明。雙dfs 1 include 2 include 3 include 4 include 5 6using namespace std 7const int maxn 1e4 5 8 vector g maxn 圖的鄰...