Cod sursa(job #2829179)

Utilizator tandiToader Andi tandi Data 8 ianuarie 2022 13:05:25
Problema Asmax Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

vector<vector<int>> adiacenta; //matrice de adiacenta
int valoare[16002], vizitat[16002], maxim = -1002; //vectorul cu valorile nodurilor; vector de frecventa pentru vizitarea nodurilor in DFS, maximul initial

void dfs(int nod)
{
	vizitat[nod]++;

	for (int i = 0; i < adiacenta[nod].size(); i++)
	{
		if (vizitat[i] == 0)
		{
			dfs(i);
			if (valoare[nod] < valoare[nod] + valoare[i]) //daca valoarea unui vecin este negativa, nu o adaugam la suma acestuia acestuia
				valoare[nod] += valoare[i];
		}
		if (valoare[nod] > maxim) //alegem suma maxima dintre valorile tuturor nodurilor
			maxim = valoare[nod];
	}
}

int main()
{
	int n;
	ifstream in("asmax.in");
	in >> n;
	for (int i = 1; i <= n; i++) //citesc datele din fisierul de intrare
		in >> valoare[i];
	adiacenta.resize(n + 1);
	for (int i = 1; i <= n; i++)
	{
		int tata, fiu;
		in >> tata >> fiu;
		adiacenta[tata].push_back(fiu);
		adiacenta[fiu].push_back(tata);
	}
	in.close();

	dfs(1);

	ofstream out("asmax.out"); //afisez raspunsul in fisierul de iesire
	out << maxim;
	out.close();

}