求助大佬,看了半天没看出来哪里有问题
#include <bits/stdc++.h>
using namespace std;
const int N=6005;
int n, happy[N], u1, v1, root=0, f[N][1];
vector<int> a[N];
void dfs(int u, int fa)
{
f[u][1]=happy[u];
f[u][0]=0;
for (int i=0; i<a[u].size(); i++)
{
int v=a[u][i];
if (v==fa) continue;
dfs(v, u);
f[u][0]+=max(f[v][1], f[v][0]);
f[u][1]+=f[v][0];
}
}
int main()
{
scanf("%d", &n);
for (int i=1; i<=n; i++) scanf("%d", &happy[i]);
root=n*(n+1)/2;
for (int i=1; i<n; i++)
{
scanf("%d%d", &u1, &v1);
a[u1].push_back(v1);
a[v1].push_back(u1);
root-=u1;
}
dfs(root, -1);
printf("%d", max(f[root][0], f[root][1]));
return 0;
}