标签:sizeof += turn scanf namespace std ack highlight back
#include <bits/stdc++.h>
using namespace std;
int r[6005],dp[6005][2];
bool is_son[6005];
vector<int> son[6005];
int solve(int n,int k){
if(~dp[n][k])
return dp[n][k];
if(!son[n].size()){
dp[n][k]=k*r[n];
return dp[n][k];
}
int ans=0;
for(int i=0;i<son[n].size();i++)
if(k)
ans+=solve(son[n][i],0);
else
ans+=max(solve(son[n][i],0),solve(son[n][i],1));
dp[n][k]=max(ans+r[n]*k,dp[n][k]);
return dp[n][k];
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&r[i]);
for(int i=1;i<n;i++){
int a,b;
scanf("%d%d",&a,&b);
son[b].push_back(a);
is_son[a]=true;
}
memset(dp,-1,sizeof(dp));
for(int i=1;i<=n;i++)
if(!is_son[i]){
printf("%d\n",max(solve(i,1),solve(i,0)));
break;
}
return 0;
}
标签:sizeof += turn scanf namespace std ack highlight back
原文地址:http://www.cnblogs.com/HC-LittleJian/p/7687014.html