Cod sursa(job #3270245)

Utilizator angelaAngela Visuian angela Data 22 ianuarie 2025 17:49:14
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

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

const int MAX_N = 16001;
vector<int> G[MAX_N];
bool v[MAX_N];
int n;
int smax[MAX_N]; 
int V[MAX_N]; // smin[x][i] = suma minima a valorilor plasate in noduri
                     // in subarbborele cu radacina in x, daca in x plasam valoarea i 

void Dfs(int x);
void CitesteGraf();

int main()
{
	CitesteGraf();
	Dfs(1);
	int ma = -1e6;
	for(int i = 1; i<= n; i++)
		if(ma < smax[i])
			ma = smax[i];
	fout << ma;
}

void Dfs(int x)
{
	v[x] = true;
	smax[x]= V[x];
	
	for (int y : G[x])
	{
		if (v[y]) continue;
		Dfs(y);
		if(smax[y] > 0)
		smax[x] += smax[y];
	}
}

void CitesteGraf()
{
	fin >> n;
	int x, y;
	for(int i = 1; i <= n ; ++i)
		fin >> V[i];
	for (int i = 1; i < n; ++i)
	{
		fin >> x >> y;
		G[x].push_back(y);
		G[y].push_back(x);
	}
}