tarjan算法——割点

别来无恙 提交于 2019-11-30 05:29:49

简述:从0号点开始,更新每个点能到达的最早时间戳,当 dfn[u]<=low[v] 时,u为割点

代码:

 

 1 ///根结点为割点的条件:孩子数大于1
 2 int vis[maxn],dfn[maxn],low[maxn];
 3 int n,m,a[maxn][maxn],lay,son[maxn];
 4 void tarjan(int u) {
 5     low[u]=dfn[u]=++lay;
 6     vis[u]=1;
 7     for(int v=0;v<n;v++)
 8         if(a[u][v]&&!vis[v]) {
 9             tarjan(v);
10             low[u]=min(low[u],low[v]);
11             if(dfn[u]<=low[v])
12                 son[u]++;
13         }
14         else if(a[u][v])low[u]=min(dfn[v],low[u]);
15 }
View Code

 

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