Cod sursa(job #3370848)

Utilizator batasAndrei Batis batas Data 27 octombrie 2026 15:28:58
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <climits>
using namespace std;
using VI = vector<int>;
using VB = vector<bool>;
using VVI = vector<VI>;

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

const int MAX_N = 5005;
int n;
VI val, dp, t;
VVI adj;

void ReadInput();
void Solve();
void DFS(int node);

int main()
{
	ReadInput();
	Solve();
	
	return 0;
}	

void Solve()
{
	DFS(1);
	
	int ans(-INT_MAX);
	for (int i = 1; i <= n; ++i)
		ans = max(ans, dp[i]);
	fout << ans;
}

void DFS(int node)
{
	for (int nbr : adj[node])
		if (t[node] != nbr)
		{
			t[nbr] = node;
			DFS(nbr);
			
			if (dp[nbr] > 0)
				dp[node] += dp[nbr];
		}
}

void ReadInput()
{
	fin >> n;
	
	t = dp = VI(n + 1);
	adj = VVI(n + 1);
	
	for (int i = 1; i <= n; ++i)
		fin >> dp[i];
	
	int u, v;
	for (int i = 1; i < n; ++i)
	{
		fin >> u >> v;
		
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
}