代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=6005;
int n,h[maxn],dp[maxn][2];
vector<int> G[maxn];
int dfs(int x,int y){
if(dp[x][y]!=0) return dp[x][y];
if(y==1){
for(int i=0;i<G[x].size();i++){
dp[x][y]+=dfs(G[x][i],0);
}
dp[x][y]+=h[x];
}else{
for(int i=0;i<G[x].size();i++){
dp[x][y]+=max(dfs(G[x][i],0),dfs(G[x][i],1));
}
}
return dp[x][y];
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>h[i];
}
int u,v;
for(int i=1;i<n;i++){
cin>>u>>v;
G[u].push_back(v);
}
dfs(1,0);
dfs(1,1);
cout<<max(dp[1][0],dp[1][1])<<endl;
return 0;
}
恳请各位大佬指点迷津