Pagini recente » Cod sursa (job #2401759) | Cod sursa (job #29648) | Cod sursa (job #2677145) | Cod sursa (job #2866568) | Cod sursa (job #3294725)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int main() {
int n, x, y, res = INT_MIN;
vector<vector<int>> adj;
vector<int> dp;
vector<int> parinte;
fin >> n;
adj.resize(n + 1);
dp.resize(n + 1);
parinte.resize(n + 1);
for (int i = 1; i <= n; ++i)
fin >> dp[i];
for (int i = 1; i < n; ++i) {
fin >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
function<void(int)> dfs = [&](int node) -> void {
for (int neigh : adj[node]) {
if (neigh == parinte[node])
continue;
parinte[neigh] = node;
dfs(neigh);
dp[node] = max(dp[node], dp[node] + dp[neigh]);
}
res = max(res, dp[node]);
};
dfs(1);
fout << res << "\n";
return 0;
}