Cod sursa(job #621030)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 16 octombrie 2011 17:55:27
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#include <math.h>
#include <vector>

using namespace std;

long i, n, mx, cost[16010], vaz[16010], best[16010];

vector < long > v[16010];

void df(long nod) {
	
	vaz[nod] = 1;
	best[nod] = cost[nod];
	long len = v[nod].size();
	
	for (long i = 0; i < len; ++i) {
		if (vaz[v[nod][i]] == 0) {
			df(v[nod][i]);
			if (best[v[nod][i]] > 0) {
				best[nod] += best[v[nod][i]];
			}
		}
	}
	
	if (best[nod] > mx) mx = best[nod];
}

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

	scanf("%ld", &n);
	
	for (i = 1; i <= n; ++i) {
		scanf("%ld", &cost[i]);
	}
	
	long A, B;
	
	for (i = 1; i < n; ++i) {
		scanf("%ld %ld", &A, &B);
		v[A].push_back(B);
		v[B].push_back(A);
	}

	mx = -2000000000;
	df(1);
	printf("%ld\n", mx);
	
	return 0;
}