Pagini recente » Cod sursa (job #348699) | Cod sursa (job #55458) | Cod sursa (job #2481002) | Cod sursa (job #351160) | Cod sursa (job #1913142)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
#define NMAX 16001
vector<int> arb[NMAX];
int n;
int v[NMAX];
int d[NMAX];
int tata[NMAX];
#define pb push_back
void citire()
{
scanf("%d ",&n);
for(int i=1;i<=n;i++)
scanf("%d ",&v[i]);
for(int i=1;i<n;i++)
{
int x,y;
scanf("%d %d ",&x,&y);
arb[x].pb(y);
arb[y].pb(x);
}
}
bool viz[NMAX];
int solutie = -10000;
void dfs(int start)
{
viz[start]=1;
d[start]=v[start];
for(vector<int>::iterator it=arb[start].begin();it!=arb[start].end();it++)
{
if(!viz[*it])
{
dfs(*it);
if(d[*it]>0)
d[start]+=d[*it];
}
}
solutie=max(solutie,d[start]);
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
citire();
dfs(1);
printf("%d\n",solutie);
return 0;
}