Pagini recente » Cod sursa (job #21983) | Cod sursa (job #1777065) | Cod sursa (job #3131331) | Cod sursa (job #512316) | Cod sursa (job #1899271)
#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 dfs(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]);
}
int main(){
fin >>N;
for (int i=1;i<=N;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);
fout <<rs<<endl;
//for (int i=1;i<=N;i++) cout <<dp[i]<<" ";
return 0;
}