Pagini recente » Cod sursa (job #1986080) | Cod sursa (job #3132186) | Cod sursa (job #3203082) | Cod sursa (job #1341627) | Cod sursa (job #1811715)
#include <stdio.h>
#include <stdlib.h>
int nr,lista[16001],nod[32001],next[32001],rez[16001],v[16001],mark[16001];
void add(int x,int y)
{
nr++;
nod[nr]=y;
next[nr]=lista[x];
lista[x]=nr;
}
void dfs(int x)
{
int k;
k=lista[x];
mark[x]=1;
rez[x]=v[x];
while(k)
{
if(mark[nod[k]]==0)
{
dfs(nod[k]);
if(rez[nod[k]]>0)
rez[x]+=rez[nod[k]];
}
k=next[k];
}
}
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]);
for(i=1; i<n; i++)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs(1);
max=-2000000000;
for(i=1; i<=n; i++)
if(rez[i]>max)
max=rez[i];
printf("%d\n",max);
return 0;
}