代码:
int Vcnt=0;
int Ecnt=0;
dfs(int u,int father,int depth) //u是当前结点,father父节点,depth记录dfs标号
{
visit[u]=1;
low[u]=dfn[u]=depth;
int child=0;//记录u的孩子数
for (int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if (visit[v]==1&&v!=father)
low[u]=min(low[u],dep[v]);
if (visit[v]==0)
{
child++;
dfs(v,u,depth+1);
low[u] = min(low[u], low[v]);
if(u==root&&child>1||u!=root&&low[v]>=dfn[u])
{
cutpoint[u]=1;//是割点
Vcnt++;
}
if (low[v] > dfn[u])
{
//<u,v>是割边;
Ecnt++;
}
}
}
visit[u]=2;
}