自己写的dfs和大佬写的dfs,感觉思路基本一样,但是测评结果截然不同
查看原帖
自己写的dfs和大佬写的dfs,感觉思路基本一样,但是测评结果截然不同
302750
Main_WF楼主2022/7/12 20:21

为何结果会不一样呢? 我自己写的

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)));
}
2022/7/12 20:21
加载中...