【模板】tarjan求割点

 1 int dfn[maxn];
 2 int low[maxn];
 3 bool cut[maxn];
 4 int tot;
 5 
 6 void tarjan(int x)
 7 {
 8     dfn[x] = low[x] = ++tot;
 9     int cntf = 0;
10     for (Re int i = head[x]; i != -1; i = e[i].nxt)
11     {
12         int u = e[i].u;
13         if (!dfn[u])
14         {
15             tarjan(u);
16             low[x] = min(low[x], low[u]);
17             if (low[u] >= dfn[x])
18             {
19                 cntf++;
20                 if (x > 1 || cntf > 1) cut[x] = true;
21             }
22         }
23         else low[x] = min(low[x], dfn[u]);
24     }
25 }
View Code

猜你喜欢

转载自www.cnblogs.com/thjkhdf12/p/11724887.html
今日推荐