Cod sursa(job #129302)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 28 ianuarie 2008 22:02:24
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>

typedef struct nod
{
	int inf;
	nod *adr;
} *pNod;

pNod v[16001];

int viz[16001], n, val[16001], max;

void adauga(int x, int y)
{
	pNod q;
	q = new nod;
	q -> inf = y;
	q -> adr = v[x];
	v[x] = q;
	q = new nod;
	q -> inf = x;
	q -> adr = v[y];
	v[y] = q;
}

void citire()
{
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);

	scanf("%d",&n);
	int i, x, y;
	for (i = 1; i <= n; i++) scanf("%d",&val[i]);
	for (i = 1; i < n; i++)
	{
		scanf("%d %d",&x, &y);
		adauga(x,y);
	}
}

void df(int nod)
{
	while (v[nod])
	{
		viz[nod] = 1;

		if (!viz[v[nod] -> inf])
		{
			df(v[nod] -> inf);
			if (val[v[nod] -> inf] > 0)
				val[nod] += val[v[nod] -> inf];
		}
		v[nod] = v[nod] -> adr;
	}

}

int main()
{
	citire();
	int i;

	df(1);

	max = - 1000000000;
	for (i = 1; i <= n; i++) if (val[i] > max) max = val[i];

	printf("%ld\n",max);
	return 0;
}