大約是今年4月學的演算法了,後來5月的時候做題還寫了乙個退化的tarjanqaq。
時間複雜度:o(n+m)
用途:有向圖縮環
1 #include2 #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 圖的鄰...