Pagini recente » Cod sursa (job #2463711) | Cod sursa (job #2142070) | Cod sursa (job #3237318) | Cod sursa (job #1538399) | Cod sursa (job #893699)
Cod sursa(job #893699)
#include <cstdio>
#include <vector>
#include <list>
#define NMAX 16001
using namespace std;
int n;
vector < list < int > > Tree;
int vizitat[NMAX],cost[NMAX],Sol[NMAX];
int MAXIM;
void citesc(){
int x,y;
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
Tree.resize(n+1);
for(register int i=1;i<=n;++i)
scanf("%d",&cost[i]);
for(register int i=1;i<n;++i){
scanf("%d%d",&x,&y);
Tree[x].push_back(y);
Tree[y].push_back(x);
}
}
void DFS(int root){
vizitat[root] = 1;
Sol[root] = cost[root];
for(list < int >::iterator it = Tree[root].begin();it!=Tree[root].end();++it)
if(!vizitat[*it]){
DFS(*it);
if(Sol[*it] > 0)
Sol[root] += Sol[*it];
}
MAXIM = max(MAXIM,Sol[root]);
}
int main(){
citesc();
MAXIM = (-1) * 0x3f3f3f3f;
DFS(1);
printf("%d",MAXIM);
return 0;
}