为何结果会不一样呢?
我自己写的
void dfs(int step,int fa)
{
int max1=0,max2=0,cnt=0;
for(int i=head[step],to;i!=0;i=e[i].next)
{
if((to=e[i].v)!=fa)
{
cnt++;
dfs(to,step);
if(f[to]>max1)//找最大次大值
max2=1,max1=f[to];
else if(f[to]>max2)
max2=f[to];
}
}
f[step]=max(max1+cnt,1);//特判叶子节点,因为最小不可能为0
int mx=0;
if(cnt==0)mx=1;
else if(cnt==1)mx=max1+1;
else mx=max1+max2+cnt-1;
ans=max(ans,mx);//如果出现了只有一个孩子的情况会挂,稍微改一改
}
第一篇题解:
void dfs(int step,int fa)
{
int max1=0,max2=0,cnt=0;
for(int i=head[step],to;i!=0;i=e[i].next)
{
if((to=e[i].v)!=fa)
{
cnt++;
dfs(to,step);
f[step]=max(f[step],f[to]);
if(f[to]>max1)//找最大次大值
max2=max1,max1=f[to];
else if(f[to]>max2)
max2=f[to];
}
}
f[step]+=(1+max(0,cnt-1));//特判叶子节点,因为最小不可能为0
ans=max(ans,max1+max2+1+max(0,cnt-1-(fa==0)));
}