tarjan求强连通分量模板

代码:

 1 void tarjan(int u) {
 2     dfn[u] = ++dfncnt;
 3     low[u] = dfncnt;
 4     st.push(u);
 5     ins[u] = true;
 6     for (int i = 0; i < SPG[u].size(); i++) {
 7         int v = SPG[u][i].to;
 8         if (!dfn[v]) {
 9             tarjan(v);
10             low[u] = min(low[u], low[v]);
11         }
12         else if (ins[v]) {
13             low[u] = min(low[u], dfn[v]);
14         }
15     }
16     if (dfn[u] == low[u]) {
17         int v;
18         ++scccnt;
19         do {
20             v = st.top();
21             st.pop();
22             ins[v] = false;
23             scc[v] = scccnt;
24         } while (u != v);
25     }
26 }

 

 
posted @ 2022-07-31 11:01  Keyzee  阅读(30)  评论(0)    收藏  举报