Cod sursa(job #2500687)

Utilizator mariaghinescu22Ghinescu Maria mariaghinescu22 Data 28 noiembrie 2019 15:35:23
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("asmax.in");
ofstream out("asmax.out");

const int N = 16001, INF = 1000001;
int vf[2 * N], urm[2 * N], lst[N], v[N], n, nr, smax = -INF;  // nr = pozitia curenta
bool visit[N];

void add(int x, int y) {
	vf[++nr] = y;
	urm[nr] = lst[x];
	lst[x] = nr;
}

int dfs(int x) {
	visit[x] = true;
	int p = lst[x], y, d, s = v[x];
	while (p != 0) {
		y = vf[p];
		if (!visit[y]) if ((d = dfs(y)) >= 0) s += d;
		p = urm[p];
	}
	if (s > smax) smax = s;
	return s;
}

int main() {
	int a, b;
	in >> n;
	for (int i = 1; i <= n; i++) in >> v[i];
	for (int i = 1; i <= n - 1; i++) {
		in >> a >> b;
		add(a, b);
		add(b, a);
	}
	dfs(1);
	out << smax;
	return 0;
}