Cod sursa(job #721048)

Utilizator toniobFMI - Barbalau Antonio toniob Data 23 martie 2012 10:50:26
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <fstream>
#include <vector>
using namespace std;

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

int n,v[16005],best = -(1<<30);
bool marcat[16005];
vector <int > a[16005];

void dfs (int nod) {
	int s = 0;
	
	for (size_t i = 0; i < a[nod].size(); ++i) {
		if (a[nod][i] <= n && !marcat[a[nod][i]]) {
			marcat[a[nod][i]] = true;
			dfs(a[nod][i]);
			if (v[a[nod][i]] > 0) s += v[a[nod][i]];
		}
	}
	
	v[nod] += s;
	if (best < v[nod]) best = v[nod];
}

int main () {
	in >> n;
	
	for (int i = 1; i <= n; ++i) {
		in >> v[i];
	}
	for (int i = 1,x,y; i < n; ++i) {
		in >> x >> y;
		a[x].push_back(y);
		a[y].push_back(x);
	}
	
	marcat[1] = true;
	dfs (1);
	
	out << best << '\n';
	
	return 0;
}