自我感觉没问题, 为什么会T三个点?
望各位大神指点.
#include <bits/stdc++.h>
using namespace std;
struct node {
int to;
int next;
}edge[16005];
int n,tot;
int b[16005];
int head[16005];
int f[16005],ans=-(1<<30);
void dp(int u, int fa)
{
f[u]=b[u];
for(int i=head[u]; i; i=edge[i].next)
{
int v=edge[i].to;
if(v==fa) continue;
dp(v,u);
f[u]+=max(0,f[v]);
}
}
void add(int from, int to)
{
tot++;
edge[tot].to=to;
edge[tot].next=head[from];
head[from]=tot;
}
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++) scanf("%d", &b[i]);
for(int i=1; i<n; i++)
{
int l,k;
scanf("%d%d", &l, &k);
add(l,k);
add(k,l);
}
dp(1,0);
for(int i=1; i<=n; i++) ans=max(ans,f[i]);
printf("%d", ans);
return 0;
}