源代码:
#include <bits/stdc++.h>
std::vector <int> G[11451], r;
int x, l, k, N, __[11451][4], ind[11451], st, flag;
void dfs(int node) {
__[node][1] = r[node];
for (int i = 0, j; i < (j = G[node].size()); i ++) {
dfs(j), __[node][0] += std::max(__[j][0], __[j][1]);
__[node][1] += __[j][0];
}
}
int main() {
std::cin >> N, r.resize(11451);
for (int i = 1; i <= N; i ++) std::cin >> r[i];
for (int i = 1; i < N; G[k].push_back(l), i ++) std::cin >> l >> k, ind[l] = 1;
for (int i = 1; i <= N && !flag; i ++) st = (flag = !ind[i]) ? i : 1;
dfs(1), std::cout << std::max(__[st][0], __[st][1]);
return 0;
}