Pagini recente » Cod sursa (job #2969941) | Cod sursa (job #612664) | Cod sursa (job #263786) | Cod sursa (job #1239661) | Cod sursa (job #3209021)
#include <fstream>
#include <climits>
#include <vector>
std::ifstream fin("asmax.in");
std::ofstream fout("asmax.out");
std::vector<int> val, dp;
std::vector<std::vector<int>> tree;
void DFS (int node, int father) {
for (int x : tree[node]) {
if (x != father) {
DFS (x, node);
if (dp[x] > 0)
dp[node] += dp[x];
}
}
}
int main () {
int n; fin >> n;
val.reserve (n + 1), dp.reserve (n + 1);
for (int i = 1; i <= n; i += 1)
fin >> val[i], dp[i] = val[i];
tree.assign (n + 1, std::vector<int> ());
for (int i = 0; i < n - 1; i += 1) {
int x, y; fin >> x >> y;
tree[x].emplace_back (y);
tree[y].emplace_back (x);
}
DFS (1, 0);
int Max = INT_MIN;
for (int i = 1; i <= n; i += 1)
Max = std::max (Max, dp[i]);
fout << Max;
return 0;
}