Cod sursa(job #3309482)

Utilizator mihai.25Calin Mihai mihai.25 Data 5 septembrie 2025 12:37:46
Problema Asmax Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>

#include <vector>

using namespace std;

ifstream fin ("asmax.in");

ofstream fout ("asmax.out");

int n;

const int limit = 16001;

vector<vector<int>> v (limit);

vector<bool> vizitat (limit);

vector<int> val (limit), S (limit), Max (limit);

int suma_totala;

void dfs (int nod) {

	vizitat[nod] = true;

	Max[nod] = -1e9;

	S[nod] = val[nod];

	for (int i = 0; i < v[nod].size(); ++i) {

		if (!vizitat[v[nod][i]]) {

			dfs (v[nod][i]);

			S[nod] += S[v[nod][i]];

			Max[nod] = max(Max[nod], S[v[nod][i]]);
		}
	}

	Max[nod] = max(Max[nod], suma_totala - S[nod]);
}

int main () {

	fin >> n;

	for (int i = 1; i <= n; ++i) {

		fin >> val[i];

		suma_totala += val[i];
	}

	for (int i = 1; i < n; ++i) {

		int x, y;

		fin >> x >> y;

		v[x].push_back(y);

		v[y].push_back(x);
	}

	dfs(1);

	int maxim = -1e9;

	for (int i = 1; i <= n; ++i)
		if (Max[i] > maxim)
			maxim = Max[i];
	
	fout << maxim;
	
	return 0;
}