#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;
}
为什么有个点过不了呢?哪里出了问题?希望大佬可以指教一下