Cod sursa(job #3227590)

Utilizator george_buzasGeorge Buzas george_buzas Data 2 mai 2024 09:01:12
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <vector>
#include <bitset>
#define MAX_NR_NODES 16000 
#define MAX_VALUE -1001
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");

int valuesDP[MAX_NR_NODES + 1];
vector<int> tree[MAX_NR_NODES + 1];
bitset<MAX_NR_NODES + 1> isVisited;
int maxValue = MAX_VALUE;

void getMaxValueSubtreeDFS(int node) {
	isVisited[node] = true;
	for (int neighbour : tree[node]) {
		if (!isVisited[neighbour]) {
			getMaxValueSubtreeDFS(neighbour);
			valuesDP[node] = max(valuesDP[node], valuesDP[node] + valuesDP[neighbour]);
		}
	}
	maxValue = max(maxValue, valuesDP[node]);
}

int main() {
	int nrNodes;
	fin >> nrNodes;
	for (int node = 1; node <= nrNodes; ++node) {
		fin >> valuesDP[node];
	}
	for (int edge = 1; edge < nrNodes; ++edge) { // since this a tree, the number of edges will always be: nrNodes - 1
		int node1, node2;
		fin >> node1 >> node2;
		tree[node1].push_back(node2);
		tree[node2].push_back(node1);
	}
	getMaxValueSubtreeDFS(1);
	fout << maxValue;
	return 0;
}