图的割点分两种情况,若不是根节点,则必须满足该点的子节点能回溯到自己或自己以上。若是根节点,只需满足有两个或以上子节点。
void dfs(int u,int fa)
{low[u]=num[u]=++dfn;int child=0;for(int i=0;i<G[u].size();i++){int v=G[u][i];if(!num[v]){child++;dfs(v,u);low[u]=min(low[u],low[v]);if(low[v]>=num[u]&&u!=1)iscut[u]=true;}else if(v!=fa&&num[v]<num[u]){low[u]=min(low[u],num[v]);}}if(u==1&&child>1) iscut[1]=1;
}