#include<bits/stdc++.h>
using namespace std;
vector<int>a[6005];
int dp[6005][5];
int kl[6005];
int cs[6005];
int ans[6005];
int ma=0;
bool vis[6005];
void dfs(int tup,int n){
for(int i=0;i<a[n].size();i++){
if(a[n][i]!=tup){
cs[a[n][i]]=cs[n]+1;
if(kl[a[n][i]]>0){
ans[cs[a[n][i]]]+=kl[a[n][i]];
}
dfs(n,a[n][i]);
}
}
ma=max(ma,cs[n]);
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>kl[i];
}
int x,y;
for(int i=1;i<=n-1;i++){
cin>>x>>y;
vis[x]=1;
a[x].push_back(y);
a[y].push_back(x);
}
for(int i=1;i<=n;i++){
if(vis[i]==0){
cs[i]=1;
ans[1]=kl[i];
dfs(-1,i);
}
}
dp[0][1]=0;
for(int i=1;i<=ma;i++){
dp[i][1]=dp[i-1][0]+cs[i];
dp[i][0]=max(dp[i-1][1],dp[i-1][0]);
}
cout<<max(dp[ma][1],dp[ma][0]);
return 0;
}
就1#AC了,其他都WA了