Cod sursa(job #175138)

Utilizator Iceman_ftgBurghelea Alex Iceman_ftg Data 9 aprilie 2008 16:58:08
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream.h>
#define N 16100
ifstream fin("asmax.in");
ofstream fout("asmax.out");
struct nod {int info;nod *urm;};
int n,tati[N],radacina,viz[N];
nod *fii[N],*q;
long long s[N],v[N];
void citire()
{
fin>>n;
int i;
for(i=1;i<=n;i++)
	{
	fin>>v[i];
	tati[i]=0;
	}
int a,b;
for(i=1;i<n;i++)
	{
	viz[i]=0;
	fin>>a>>b;
	q=new nod;
	q->info=b;
	q->urm=fii[a];
	fii[a]=q;
	tati[b]=a;
	}
for(i=1;i<=n;i++)
if(tati[i]==0)
	{
	radacina=i;
	break;
	}
}
int max(int a,int b)
{
if(a>b) return a;
return b;
}

void progdin(int k)
{
nod *p;
p=fii[k];
int i;
	while(p)
	{
	progdin(p->info);
	p=p->urm;
	}
s[k]=v[k];
p=fii[k];

while (p)
 {if(!viz[p->info])
	{
	viz[p->info]=1;
	s[k]=s[k]+max(0,s[p->info]);
	p=p->urm;
	}
	viz[p->info]=0;
 }
 viz[k]=0;
}
int main()
{
int max,i,j;
nod *p;
citire();
viz[radacina]=1;
progdin(radacina);
max=s[1];
for(i=2;i<=n;i++)
if (max<=s[i])
max=s[i];
fout<<max<<'\n';
return 0;
}