简述:从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 }
