有一个点过不了,求解!!
查看原帖
有一个点过不了,求解!!
592681
ran_Diana楼主2022/5/27 22:47
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
struct Edge{int nt,to;}e[N];
int n,h[N],dp[N][2],a,b,ans,head[N],cnt;
void dfs(int u,int fu)
{ 
	dp[u][1]=h[u];
	for(int i=head[u];i;i=e[i].nt)
	{
		int v=e[i].to;
			if(v==fu) continue;
			dfs(v,u);
			dp[u][0]=max(dp[u][0],dp[u][0]+dp[v][1]);
			dp[u][1]=max(dp[u][1],dp[v][0]+dp[u][1]);;
	}
	ans=max(ans,max(dp[u][1],dp [u][0]));
}
void add(int u,int v)
{
	e[++cnt].nt=head[u];
	e[cnt].to=v;
	head[u]=cnt;
}




int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&h[i]);	
	}	
	for(int i=1;i<n;i++)
		{
			scanf("%d%d",&a,&b);
			add(a,b);
			add(b,a);
		}
		dfs(1,0);
		printf("%d",ans);
	return 0;
}

为什么有个点过不了呢?哪里出了问题?希望大佬可以指教一下

2022/5/27 22:47
加载中...