Pagini recente » Cod sursa (job #3244779) | Cod sursa (job #2396809) | Cod sursa (job #3206864) | Cod sursa (job #2496844) | Cod sursa (job #2304887)
#include <bits/stdc++.h>
#define NMAX 16001
using namespace std;
vector <int>arb[NMAX];
int n,v[NMAX];
int d[NMAX];
int tata[NMAX];
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].push_back(y);
arb[y].push_back(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;
}