Pagini recente » Cod sursa (job #439913) | Cod sursa (job #1231794) | Cod sursa (job #1301701) | Cod sursa (job #2342772) | Cod sursa (job #342288)
Cod sursa(job #342288)
#include <stdio.h>
#define DIM 16005
struct nod {int x;
nod *urm;} *lst[DIM];
int a[DIM],best[DIM],viz[DIM];
int n,max;
void add (int a,int b)
{
nod *p=new nod;
p->x=a;
p->urm=lst[b];
lst[b]=p;
}
void read ()
{
int i,x,y;
scanf ("%d",&n);
for (i=1; i<=n; ++i)
scanf ("%d",&a[i]);
for (i=1; i<n; ++i)
{
scanf ("%d%d",&x,&y);
add (x,y);
add (y,x);
}
}
void df (int start)
{
nod *p;
viz[start]=1;
best[start]=a[start];
for (p=lst[start]; p; p=p->urm)
if (!viz[p->x])
{
df (p->x);
if (best[p->x]>0)
best[start]+=best[p->x];
}
if (best[start]>max)
max=best[start];
}
int main ()
{
freopen ("asmax.in","r",stdin);
freopen ("asmax.out","w",stdout);
read ();
df (1);
printf ("%d",max);
return 0;
}