Cod sursa(job #309079)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 29 aprilie 2009 16:17:03
Problema Asmax Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int *arb[16000],val[16000],out[16000],it[16000];

void dfs(int rad)
{
	int i,nod;

	for(i=0;i<out[rad];i++)
	{
		nod=arb[rad][i];	
		dfs(nod);
		if(val[nod]>0)
			val[rad]+=val[nod];
	}
}
	
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");
	fscanf(f,"%i",&n);
	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;
}