Pagini recente » Cod sursa (job #2084031) | Cod sursa (job #3192250) | Cod sursa (job #2689445) | Cod sursa (job #2043030) | Cod sursa (job #3227590)
#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;
}