Cod sursa(job #6043)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 16 ianuarie 2007 21:33:44
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#include <vector>

using namespace std;

const int N_MAX = 16069;
const int INF = 2000000000;

int N;
int val[N_MAX], rez[N_MAX], viz[N_MAX];
vector <int> G[N_MAX];

void DFS(int nod)
{
	vector <int>::iterator it;
	rez[nod] = val[nod];
	viz[nod] = 1;

	for (it = G[nod].begin(); it != G[nod].end(); ++ it) {
		if (!viz[*it]) {
			DFS(*it);
			if (rez[*it] > 0) {
				rez[nod] += rez[*it];
			}
		}
	}
}

int main()
{
	freopen("asmax.in", "r", stdin);
	freopen("asmax.out", "w", stdout);

	scanf("%d\n", &N);
	int i, maxx = -INF;
	for (i = 1; i <= N; i ++) {
		scanf("%d ", &val[i]);
		if (val[i] > maxx) {
			maxx = val[i];
		}
	}

	if (maxx < 0) {
		printf("%d\n", maxx);
	} else {
		int x, y;
		for (i = 1; i < N; i ++) {
			scanf("%d %d\n", &x, &y);
			G[x].push_back(y);
			G[y].push_back(x);
		}

		DFS(1);
	
		int MAX = 0;
		for (i = 1; i <= N; i ++) {
			if (rez[i] > MAX) {
				MAX = rez[i];
			}
		}

		printf("%d\n", MAX);
	}

	return 0;
}