Pagini recente » Cod sursa (job #1657147) | Cod sursa (job #277650) | Cod sursa (job #1899019) | Cod sursa (job #2115444) | Cod sursa (job #1899282)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int N,dp[16001],sum[16001],rs=-1e9;
bool isleaf[16001];
vector <int> V[16001];
/*
void dfs1(int x,int source){
if (V[x].size()==1 && V[x][0]==source){
isleaf[x]=1;
return ;
}
for (int i=0;i<V[x].size();i++){
if (V[x][i]==source) continue;
dfs(V[x][i],x);
}
int psum=0;
for (int i=0;i<V[x].size();i++){
if (V[x][i]!=source) {
psum+=dp[V[x][i]]+sum[V[x][i]];
//if (!isleaf[V[x][i]])
}
}
dp[x]=psum;
rs=max(rs,dp[x]);
}
*/
void dfs(int x,int source){
dp[x]=sum[x];
for (int i=0;i<V[x].size();i++){
if (V[x][i]!=source){
dfs(V[x][i],x);
if (dp[V[x][i]]>0) dp[x]+=dp[V[x][i]];
}
}
}
int main(){
fin >>N;
for (int i=1;i<=N;i++) fin >>sum[i];//fin >>dp[i],sum[i]=dp[i],dp[i]=0;
for (int i=1;i<N;i++){
int x,y;
fin >>x>>y;
V[x].push_back(y);
V[y].push_back(x);
}
dfs(1,0);
for (int i=1;i<=N;i++) rs=max(rs,dp[i]);
fout <<rs<<endl;
//for (int i=1;i<=N;i++) cout <<dp[i]<<" ";
return 0;
}