Cod sursa(job #579459)

Utilizator taseTanase Alexandru tase Data 12 aprilie 2011 10:03:14
Problema Asmax Scor 100
Compilator cpp Status done
Runda lab_arbori Marime 0.8 kb
#include<stdio.h>
#include<vector>
using namespace std;

const int NMAX = 16005;
const int INF = 1000000000;

int n;
int v[NMAX], maxim = -INF;
vector<int> Arb[NMAX];
bool viz[NMAX];

void citire()
{
	scanf("%d",&n);
	for(int i = 1 ; i <= n ; i++)
		scanf("%d",&v[i]);
	int x, y;
	for(int i = 1 ; i <= n ; i++)
	{
		scanf("%d%d",&x,&y);
		Arb[x].push_back(y);
		Arb[y].push_back(x);
	}
}

void dfs(int nod)
{
	viz[nod] = 1;
	for(vector<int> :: iterator it = Arb[nod].begin() ; it != Arb[nod].end() ; it++)
		if(!viz[*it])
		{
			dfs(*it);
			if(v[*it] > 0)
				v[nod] += v[*it];
		}
	
}

void scrie()
{
	for(int i = 1 ; i <= n ; i++)
		maxim = max(maxim , v[i]);
	printf("%d\n", maxim);
}

int main()
{
	freopen("asmax.in", "r", stdin);
	freopen("asmax.out", "w", stdout);
	citire();
	dfs(1);
	scrie();
	return 0;
}