Cod sursa(job #973159)

Utilizator harababurelPuscas Sergiu harababurel Data 13 iulie 2013 16:43:19
Problema Asmax Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define nmax 16005
#define inf (1<<30)
using namespace std;

int best[nmax], val[nmax], n, a, b, radacina, sol;
vector <int> son[nmax];

bool used[nmax], orfan[nmax];

void dfs(int cur) {
	best[cur] = val[cur];
	used[cur] = true;

	for(int i=0; i<son[cur].size(); i++) {
		if(!used[son[cur][i]]) dfs(son[cur][i]);
		best[cur] += max(0, best[son[cur][i]]);
	}
}

int main() {
	ifstream f("asmax.in");
	ofstream g("asmax.out");

	f>>n;
	for(int i=1; i<=n; i++) f>>val[i], orfan[i] = true, best[i] = -inf;
	for(int i=1; i<n; i++) {
		f>>a>>b;
		son[a].push_back(b);
		orfan[b] = false;
	}
	for(int i=1; i<=n; i++) if(orfan[i]) radacina=i;

	dfs(radacina);

	for(int i=1; i<=n; i++) sol = max(sol, best[i]);
	g<<sol<<"\n";

	return 0;
}