Cod sursa(job #1592826)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 7 februarie 2016 23:19:43
Problema Asmax Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 1.12 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);
	}

	DFS(1);
	int nr = -INF;
	for (i = 1; i <= n; ++i)
		nr = max(nr, smax[i]);

	cout << nr;

	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;
		}
	}

	return smax[x] = sum;
}