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