Pagini recente » Cod sursa (job #2272305) | Cod sursa (job #761469) | Cod sursa (job #1016798) | Cod sursa (job #1424083) | Cod sursa (job #1899255)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int N,dp[16001],sum[16001],rs;
bool isleaf[16001];
vector <int> V[16001];
void dfs(int x,int source){
if (V[x].size()==1 && V[x][0]==source){
isleaf[x]=1;
dp[x]=sum[x];
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 (source!=V[x][i]){
psum+=dp[V[x][i]];
if (!isleaf[V[x][i]])psum+=sum[V[x][i]];
}
}
//psum+=sum[x];
dp[x]=psum;
rs=max(rs,psum);
}
int main(){
fin >>N;
for (int i=1;i<=N;i++) fin >>sum[i];
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);
fout <<rs<<endl;
//for (int i=1;i<=N;i++) cout <<dp[i]<<" ";
return 0;
}