Pagini recente » Cod sursa (job #1133752) | Cod sursa (job #2956874) | Cod sursa (job #1030543) | Cod sursa (job #1570772) | Cod sursa (job #51045)
Cod sursa(job #51045)
#include <stdio.h>
struct el { int val;
el *urm;
};
el *ad[16001],*p;
int n,i,x,y;
char viz[16001];
long a[16001],max=-2100000000;
void sume (int k)
{ long val;
int i;
el *q=ad[k];
viz[k]=1;
while (q->val!=0)
{ i=q->val;
if (viz[i]==0)
{ sume(i);
if (a[i]>0)
a[k]+=a[i];
}
q=q->urm;
}
}
int main()
{
FILE *fin,*fout;
fin=fopen("asmax.in","rt");
fout=fopen("asmax.out","wt");
fscanf(fin,"%d ",&n);
for (i=1;i<=n;i++)
fscanf(fin,"%d ",&a[i]);
for (i=1;i<=n-1;i++)
{ fscanf(fin,"%d %d",&x,&y);
p=new el;
p->val=y;
p->urm=ad[x];
ad[x]=p;
p=new el;
p->val=x;
p->urm=ad[y];
ad[y]=p;
}
sume(1);
for (i=1;i<=n;i++)
if (a[i]>max)
max=a[i];
fprintf(fout,"%ld\n",max);
return 0;
}