【模板】tarjan求割点

我只是一个虾纸丫 提交于 2019-12-02 02:02:42
 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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!