#include #include #include #include #include const int MAX_N=6e3+5; struct Node{ std::vector sons; int r; }nodes[MAX_N]; bool had_father[MAX_N]; int dp[MAX_N][2]; void dfs(const int n){ dp[n][1]=nodes[n].r; for(auto &i:nodes[n].sons){ dfs(i); dp[n][0]+=std::max(dp[i][1],dp[i][0]); dp[n][1]+=dp[i][0]; } } int main(){ std::iostream::sync_with_stdio(false),std::cin.tie(0),std::cout.tie(0); int n; std::cin>>n; for(int i=1;i<=n;i++){ int _r; std::cin>>_r; nodes[i].r=_r; } for(int i=1;i>s>>f; nodes[f].sons.push_back(s); had_father[s]=true; } int master{-1}; for(int i=1;i<=n;i++){ if(had_father[i]==false){ master=i; } } assert(master!=-1); dfs(master); std::cout<