Pagini recente » Cod sursa (job #213191) | Cod sursa (job #725587) | Cod sursa (job #2478998) | Cod sursa (job #2248050) | Cod sursa (job #1487982)
#include <iostream>
#include <cstdio>
#define maxc 16200
#include <vector>
#include <climits>
using namespace std;
int n,v[maxc],viz[maxc],a,b,nr,smax=INT_MIN;
vector <int > G[maxc];
void read()
{
scanf("%d",&n);
for (int i=1;i<=n;++i)
scanf("%d",&v[i]);
for (int i=1;i<n;++i)
{
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
}
int rec(int k)
{
int s=v[k];
for (vector<int > :: iterator it= G[k].begin(); it!=G[k].end(); ++it )
{
if (!viz[*it])
{
viz[*it]=1;
++nr;
int d=rec(*it);
if (d>=0)
s+=d;
}
}
if (smax<s)
smax=s;
return s;
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
read();
viz[1]=1;
rec(1);
printf("%d",smax);
return 0;
}