Cod sursa(job #2913775)

Utilizator Paul_DobrescuPaul Dobrescu Paul_Dobrescu Data 16 iulie 2022 21:27:31
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

#define ll long long

using namespace std;

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

const int inf = 1e9 + 12415;

void dfs (int nod, vector< vector<int>>& a, vector <int>& val, vector <bool>& viz, vector <int>& rez)
{
	viz[nod] = true;
	for(int it : a[nod])
	{
		if(!viz[it])
		{
			dfs(it, a, val, viz, rez);
			if(rez[nod] + rez[it] > rez[nod])
				rez[nod] += rez[it];
		}
	}
}

int main()
{
// #ifndef ONLINE_JUDGE
// 	freopen("input", "r", stdin);
// 	freopen("outputs", "w", stdout);
// #endif
	int n;
	reader >> n;
	vector <int> val(n + 1);
	for(int i = 1; i <= n; ++i)
		reader >> val[i];
	vector <vector <int>> a(n + 1);
	for(int i = 1; i < n; ++i)
	{
		int x, y;
		reader >> x >> y;
		a[x].emplace_back(y);
		a[y].emplace_back(x);
	}	
	vector <bool> viz(n + 1, false);
	vector <int> rez(n + 1, 0);
	for(int i = 1; i <= n; ++i)
		rez[i] = val[i];
	dfs(1, a, val, viz, rez);
	int maxi = -1e9;
	for(int i = 1; i <= n; ++i)
		maxi = max(maxi, rez[i]);
	writer << maxi;
	return 0;
}