Cod sursa(job #159346)

Utilizator city_guy91alex isip city_guy91 Data 14 martie 2008 08:22:44
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
struct nod{long int info;nod *next;};
nod *p[16002];
long int n,i,i1,i2,v[16002],viz[16002],smax;
void pune();
void df(long int ii);
int main()
{
	FILE *f,*g;f=fopen("asmax.in","r");g=fopen("asmax.out","w");
	fscanf(f,"%ld",&n);
	for(i=1;i<=n;i++) fscanf(f,"%ld",&v[i]);
	for(i=1;i<n;i++)
	{fscanf(f,"%ld%ld",&i1,&i2);pune();}
	df(1);
	smax=-16000001;
	for(i=1;i<=n;i++) smax=(v[i]>smax)?v[i]:smax;
	fprintf(g,"%ld",smax);
	fcloseall();
	return 0;
}
void pune()
{
	nod *paux;
	paux=new nod;
	paux->info=i1;
	if(!p[i2]){paux->next=0;p[i2]=paux;}
	else{paux->next=p[i2];p[i2]=paux;}
	paux=new nod;
	paux->info=i2;
	if(!p[i1]){paux->next=0;p[i1]=paux;}
	else{paux->next=p[i1];p[i1]=paux;}
}
void df(long int ii)
{
	long int jj;
	nod *paux;
	paux=p[ii];viz[ii]=1;
	while(paux)
	{ jj=paux->info;
	  if(!viz[jj]){df(jj);if(v[jj]>0)v[ii]+=v[jj];}
	  paux=paux->next;
	}
}