Pagini recente » Cod sursa (job #1321479) | Cod sursa (job #243868) | Cod sursa (job #2955545) | Cod sursa (job #49856) | Cod sursa (job #1833633)
#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];
void tati()
{
queue<int>q;
q.push(1);
viz[1]=1;
for(int i=1;i<=n;i++)
d[i]=v[i];
while(!q.empty())
{
int nod = q.front();
q.pop();
int suma = v[nod];
for(vector<int>::iterator it=arb[nod].begin();it!=arb[nod].end();it++)
{
if(!viz[*it])
{
if(d[*it]>0)
suma += d[*it];
viz[*it]=1;
q.push(*it);
}
}
d[nod]=suma;
}
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
citire();
tati();
printf("%d\n",*max_element(d,d+n+1));
return 0;
}