这道题目的dfs处理,我是这么写的:
void dfs(int u,int fa)
{
dep[u]=dep[fa]+1;
for(int i=1;(1<<i)<=dep[u];i++)
f[u][i]=f[f[u][i-1]][i-1];
for(auto v:a[u])
{
if(v==fa)
continue;
f[v][0]=u;
dfs(v,u);
}
}
交了之后显示wa on #4
我在学习题解之后,按照题解的dfs尝试,为啥就对了?
void dfs(int u,int fa)
{
f[u][0]=fa,dep[u]=dep[fa]+1;
for(int i=1;i<20;i++)
f[u][i]=f[f[u][i-1]][i-1];
for(auto v:a[u])
{
if(v==fa)
continue;
dfs(v,u);
}
}