Pagini recente » Cod sursa (job #1934760) | Cod sursa (job #3145614) | Cod sursa (job #2071578) | Cod sursa (job #747906) | Cod sursa (job #1356244)
#include <cstdio>
using namespace std;
int st[16001],sf[16001],next[32003],dest[32003],s[16001],stot[16001],viz[16001];
int x,y,n,m,t,i;
int max(int x, int y){if(x>y){return x;}return y;}
void add(int x, int y)
{
if(st[x]==0){st[x]=t;}
else{next[sf[x]]=t;}
next[t]=0;
dest[t]=y;
sf[x]=t;
}
void compute(int i)
{
int j; stot[i]=s[i];viz[i]=1;
for(j=st[i];j;j=next[j])
{
if(viz[j]==0)
{
compute(j);
stot[i]+=max(0,stot[j]);
}
}
m=max(m,stot[i]);
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++){scanf("%ld",&s[i]);}
t=0;
for(i=1;i<n;i++)
{
scanf("%ld%ld",&x,&y);
t++;add(x,y);
t++;add(y,x);
}
m=-1001;
compute(1);
printf("%ld",m);
return 0;
}