Pagini recente » Cod sursa (job #3177409) | Cod sursa (job #2938000) | Cod sursa (job #2587516) | Cod sursa (job #2623888) | Cod sursa (job #3165727)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("asmax.in");
ofstream out ("asmax.out");
using int64 = long long;
const int N_MAX = 16e3;
int value[1 + N_MAX], dp[1 + N_MAX];
vector<int> tree[1 + N_MAX];
const int myINF = 1e9;
void getDP (int root, int p) {
for (int node : tree[root])
if (node != p)
getDP (node, root);
dp[root] = value[root];
for (int node : tree[root])
if (node != p)
dp[root] = max (dp[root], dp[root] + dp[node]);
}
int main()
{
int n; in >> n;
for (int node = 1; node <= n; node ++)
in >> value[node];
for (int i = 1; i < n; i ++) {
int a, b; in >> a >> b;
tree[a].push_back (b);
tree[b].push_back (a);
}
getDP (1, 0);
int maxDP = -myINF;
for (int node = 1; node <= n; node ++)
maxDP = max (maxDP, dp[node]);
out << maxDP;
return 0;
}