Pagini recente » Cod sursa (job #851616) | Cod sursa (job #2604775) | Cod sursa (job #573370) | Cod sursa (job #2540029) | Cod sursa (job #309073)
Cod sursa(job #309073)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int *arb[16000],val[16000],out[16000],it[16000];
void dfs(int rad)
{
int i;
for(i=0;i<out[rad];i++)
{
dfs(arb[rad][i]);
if(val[i]>0)
val[rad]+=val[i];
}
}
int main()
{
int n,max=-1,nod1,nod2,i;
memset(out,0,16000*sizeof(int));
memset(it,0,16000*sizeof(int));
FILE *f=fopen("asmax.in","r");
fscanf(f,"%i",&n);
for(i=0;i<n;i++)
fscanf(f,"%i",&val[i]);
for(i=0;i<n-1;i++)
{
fscanf(f,"%i%i",&nod1,&nod2);
out[nod1-1]++;
out[nod2-1]++;
}
fclose(f);
for(i=0;i<n;i++)
arb[i]=(int *) calloc(out[i],sizeof(int));
f=fopen("asmax.in","r");
for(i=0;i<n;i++)
fscanf(f,"%i",&nod1);
for(i=0;i<n-1;i++)
{
fscanf(f,"%i%i",&nod1,&nod2);
arb[nod1-1][it[nod1-1]++]=nod2-1;
arb[nod2-1][it[nod2-1]++]=nod1-1;
}
fclose(f);
dfs(0);
for(i=0;i<n;i++)
if(val[i]>max)
max=val[i];
f=fopen("asmax.out","w");
fprintf(f,"%i\n",max);
fclose(f);
return 0;
}