标签: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