模板 tarjan求強連通分量

2022-05-31 05:24:10 字數 1070 閱讀 4295

大約是今年4月學的演算法了,後來5月的時候做題還寫了乙個退化的tarjanqaq。

時間複雜度:o(n+m)

用途:有向圖縮環

1 #include 

2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include12

#define n 10001

13#define m 100001

14using

namespace

std;

15struct

graphe[m];

18int g[n],f[n]/*

father

*/,dfn[n],low[n],sta[n]/*

stack;stack[0]:the top of the stack

*/,m,n,cnt;

19/*

dfn[u]:遍歷到u點的時間; low[u]:u點可到達的各點中最小的dfn[v],即最高層的點

*/20

bool ins[n];//

in stack

21 inline void addedge(int x,int

y)24 inline void tarjan(int

u)32

else

if(ins[e[i].to])

33 low[u]=min(low[u],low[e[i].to]);

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

40}41 inline void

init()

47 cnt=0;48

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

49if(!dfn[i]) tarjan(i);

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

51 printf("

%d's father is %d\n

",i,f[i]);52}

53int

main()

tarjan求強連通分量(模板)

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

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 圖的鄰...