P1352 没有上司的舞会
#include<bits/stdc++.h>
using namespace std;
int a[6002][6002],dp[6006][2],w[6006],c[6006];
bool fa[6006];
int n;
void dfs(int r){
dp[r][1]=w[r];
for(int i=1;i<=c[r];i++){
int s=a[r][i];
dfs(s);
dp[r][1]+=dp[s][0];
dp[r][0]+=max(dp[s][0],dp[s][1]);
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>w[i];
}
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
c[y]++;
a[y][c[y]]=x;
fa[x]=1;
}
int father=1;
while(fa[father]==1)father++;
dfs(father);
cout<<dp[father][1];
return 0;
}