Cod sursa(job #2500708)

Utilizator cezarus30cezarus30 cezarus30 Data 28 noiembrie 2019 15:50:34
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;

}