为什么我加单向边会WA,而加双向边就AC了?
dfs函数代码:
void dfs1(int x,int f,int deep)
{
fa[x]=f;
dep[x]=deep;
si[x]=1;
int maxson=-1;
for(int i=h[x];i;i=ne[i])
if(e[i]!=f)
{
dfs1(e[i],x,deep+1);
si[x]+=si[e[i]];
if(si[e[i]]>maxson) son[x]=e[i],maxson=si[e[i]];
}
}
int dfn[N],num,top[N];
void dfs2(int x,int topf)
{
dfn[x]=++num;
a[num]=tr[x];
top[x]=topf;
if(!son[x]) return;
dfs2(son[x],topf);
for(int i=h[x];i;i=ne[i])
if(e[i]!=son[x]&&e[i]!=fa[x]) dfs2(e[i],e[i]);
}