Pagini recente » Cod sursa (job #2753818) | Cod sursa (job #3171043) | Cod sursa (job #1522068) | Unirea 2007, Clasament pentru clasele IX-X | Cod sursa (job #129201)
Cod sursa(job #129201)
#include <stdio.h>
#include <string.h>
#define nmax 16011
#define inf 16000000
int a[nmax],max[nmax],v[nmax],urm[2*nmax],nr[2*nmax],z,n,sol=0;
void Vadd(int i,int j)
{
nr[++z]=j;
urm[z]=v[i];
v[i]=z;
}
void parc(int i,int p)
{
int aux;
for(max[i]=a[i],aux=v[i];aux;aux=urm[aux])
if(nr[aux]!=p)
{
parc(nr[aux],i);
if(max[nr[aux]]>0)
max[i]+=max[nr[aux]];
}
if(max[i]>sol)
sol=max[i];
}
int main()
{
FILE *fi=fopen("asmax.in","r"),*fo=fopen("asmax.out","w");
fscanf(fi,"%d",&n);
memset(v,0,sizeof(v));
int ii,j,i;
for(i=1;i<=n;i++)
fscanf(fi,"%d",&a[i]);
for(sol=a[1],ii=1;ii<n;ii++)
{
fscanf(fi,"%d %d",&i,&j);
Vadd(i,j);
Vadd(j,i);
}
fclose(fi);
parc(1,0);
fprintf(fo,"%d\n",sol);
fclose(fo);
return(0);
}