Cod sursa(job #1303091)

Utilizator whoasdas dasdas who Data 27 decembrie 2014 16:45:59
Problema Asmax Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#define IA_PROB "asmax"

#include <cstdio>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>

#include <algorithm>

using namespace std;

int dfs(vector< vector<int> > &tree, int *v, int cur, int prev) {
	int m = v[cur];
	int sumpoz = 0;
	for (vector<int>::iterator child = tree[cur].begin();
			child != tree[cur].end(); child++) {
		if (*child != prev) {
			int c = dfs(tree, v, *child, cur);
			m = max(m, c);
			if (c > 0) {
				sumpoz += c;
			}

		}
	}
	return max(m, sumpoz + v[cur]);
}

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

	int n;
	scanf("%d", &n);
	int v[n];

	vector< vector<int> > tree(n);

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

	printf("%d", dfs(tree, v, 0, -1));

	return 0;
}