Cod sursa(job #555447)

Utilizator mraresMardare Rares mrares Data 15 martie 2011 15:12:30
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#define nmax 16005
using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");

int n, maxx = -500000;
int uz[nmax], dp[nmax];

struct lista
{
	int inf;
	lista * nod;
} * g[nmax];

void add(int i, int j)
{
	lista * p;
	p = new lista;
	p -> inf = j;
	p -> nod = g[i];
	g[i] = p;
}

void dd(int nod)
{
	uz[nod] = 1;
	lista *p;
	for(p = g[nod]; p; p = p->nod)
	{
		if(!uz[p->inf])
		{
			dd(p->inf);
			if(dp[p->inf] > 0) dp[nod] += dp[p->inf];
		}
		if(dp[nod] > maxx)
			maxx = dp[nod];
	}
	// fout << "\n";
}

int main()
{
	int i, x, y;
	fin >> n;
	for(i = 1; i <= n; ++ i)
		fin >> dp[i];
	for(i = 1; i <=n-1 ; ++i)
	{
		fin >> x >> y;
		add(x, y);
		add(y, x);
	}
	dd(1);
	fout << maxx << "\n";
	return 0;
}