Cod sursa(job #1592816)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 7 februarie 2016 23:06:20
Problema Asmax Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <bitset>
#include <stack>
#include <iomanip>
#define MOD 1000000000
#define NMAX 16005
#define INF (1<<30)

using namespace std;

FILE *fin = freopen("asmax.in", "r", stdin);
FILE *fout = freopen("asmax.out", "w", stdout);

typedef pair<int, int> pii;

int val[NMAX], smax[NMAX];
bool viz[NMAX];
vector<int> v[NMAX];

int DFS(int x);

int main() {
	int n, d, i, x, y;

	cin >> n;
	for (i = 1; i <= n; ++i)
		cin >> val[i];

	for (i = 0; i < n - 1; ++i) {
		cin >> x >> y;

		v[x].push_back(y);
		v[y].push_back(x);
	}

	cout << DFS(1);

	return 0;
}

int DFS(int x) {
	int i, y, sum = val[x], rez;

	viz[x] = true;
	for (i = 0; i < v[x].size(); ++i) {
		y = v[x][i];

		if (!viz[y]) {
			rez = DFS(y);

			if (rez >= 0)
				sum += rez;
		}
	}

	if (sum < 0)
		sum = 0;

	return smax[x] = sum;
}