Cod sursa(job #1429181)

Utilizator nytr0gennytr0gen nytr0gen Data 5 mai 2015 20:05:38
Problema Asmax Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 0.93 kb
#include <iostream>
#include <vector>

using namespace std;

const int NMAX = 16000 + 1;
const int INF = 1<<30;
struct {
	vector<short int> vecini;
//	short int val;
	int suma = 0;
	bool vizitat = false;
} nod[NMAX];

void dfs(const int v) {
	nod[v].vizitat = true;
	for (auto u: nod[v].vecini) {
		if (!nod[u].vizitat) {
			dfs(u);

			if (nod[u].suma > 0) {
				nod[v].suma += nod[u].suma;
			}
		}
	}
}

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

	int N; scanf("%d", &N);

	for (int v = 1; v <= N; v++) {
		scanf("%d", &nod[v].suma);
	}

	for (int i = 1; i < N; i++) {
		int v, u;
		scanf("%d %d", &v, &u);
		nod[v].vecini.push_back(u);
		nod[u].vecini.push_back(v);
	}

	for (int v = 1; v <= N; v++) {
		if (!nod[v].vizitat) {
			dfs(v);
		}
	}

	int smax = -INF;
	for (int v = 1; v <= N; v++) {
//		printf("%d %d\n", v, nod[v].suma);
		smax = max(smax, nod[v].suma);
	}

	printf("%d", smax);

	return 0;
}