Cod sursa(job #2651663)

Utilizator IRadu1529Radu Ionescu IRadu1529 Data 23 septembrie 2020 11:31:42
Problema Asmax Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <deque>
#include <algorithm>

using namespace std;

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

#define d liste[el][i]

int n;

long long int m;

vector<vector<int>> liste(16001, vector<int>());

vector<int> noduri(16001);

vector<long long int> s(16001, 0);

long long int stabilireSume(int el, vector<int> ocupat)
{
	ocupat[el] = 1;

	for (int i = 0; i < liste[el].size(); i++)
		if (ocupat[d] == 0)
		{
			s[el] += stabilireSume(d, ocupat);

			m = max(s[el], m);
		}

	if (s[el] < 0)
		return 0;

	else
		return s[el];
}

int main()
{
	fin >> n;

	vector<int> ocupat(n + 1, 0);

	for (int i = 1; i <= n; i++)
	{
		fin >> noduri[i];

		s[i] += noduri[i];
	}

	for (int i = 0; i < n - 1; i++)
	{
		int a, b;

		fin >> a >> b;

		liste[a].push_back(b);

		liste[b].push_back(a);
	}

	stabilireSume(1, ocupat);

	fout << m;
}