Pagini recente » Cod sursa (job #2839953) | Cod sursa (job #315568) | Cod sursa (job #1595094) | Cod sursa (job #1288671) | Cod sursa (job #2017793)
#include <stdio.h>
#include <stdlib.h>
#define INF 20000000
int nr,v[16001],lista[16001],nod[32001],next[32001],rez[16001],f[16001];
void add(int x,int y)
{
nr++;
next[nr]=lista[x];
nod[nr]=y;
lista[x]=nr;
}
void dfs(int x)
{
int z;
rez[x]=v[x];
f[x]=1;
z=lista[x];
while(z)
{
if(!f[nod[z]])
{
dfs(nod[z]);
if(rez[nod[z]]>0)
rez[x]+=rez[nod[z]];
}
z=next[z];
}
}
int main()
{
int n,i,x,y,max;
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&v[i]);
rez[i]=-INF;
}
for(i=1; i<n; i++)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs(1);
max=-INF;
for(i=1; i<=n; i++)
if(rez[i]>max)
max=rez[i];
printf("%d\n",max);
return 0;
}