Pagini recente » Cod sursa (job #1983428) | Cod sursa (job #1844368) | Cod sursa (job #471927) | Cod sursa (job #2214424) | Cod sursa (job #3308880)
#include <bits/stdc++.h>
#define NMAX 16002
#define INF 20000000
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int N,ans=-INF;
int cost[NMAX];
vector <int> G[NMAX];
vector <bool> vis;
vector <int> S;
int T[NMAX],dp[NMAX];
void dfs(int node,vector <int> *G,vector <bool> &vis,int *T,vector <int> &S)
{
vis[node]=1;
for(int x:G[node]){
if(!vis[x]){
T[x]=node;
dfs(x,G,vis,T,S);
}
}
S.push_back(node);
return;
}
int main()
{
fin >> N;
vis.resize(N+2);
for(int i=1;i<=N;i++){
fin >> cost[i];
}
for(int i=1;i<N;i++){
int x,y;
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
T[1]=-1;
dfs(1,G,vis,T,S);
// reverse(S.begin(),S.end());
for(int x:S){
// cout << x << " ";
dp[x]+=cost[x];
ans = max(ans,dp[x]);
dp[T[x]]+=max(dp[x],0);
}
// cout << "\n";
fout << ans;
}