在这篇文章中提到 dfn 与 low 的计算方式:
void tarjan(int u,int fa)
{
dfn[u]=low[u]=++tot;
for(auto y : G[u])
{
if(!dfn[y])
{
tarjan(y,u);
low[u]=min(low[u],low[y]);
}
else if(y!=fa)low[u]=min(low[u],dfn[y]);
}
}
但这里如果u与y有重边,是否该改为:
void tarjan(int u,int fa)
{
dfn[u]=low[u]=++tot;
for(auto y : G[u])
{
if(!dfn[y])
{
tarjan(y,u);
low[u]=min(low[u],low[y]);
}
else if(y!=fa)low[u]=min(low[u],dfn[y]);
if(y == fa) fa = -1;
}
}