Pagini recente » Cod sursa (job #3246599) | Cod sursa (job #3138794) | Istoria paginii preoni-2008/premii | Cod sursa (job #2635429) | Cod sursa (job #3294719)
#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> visited;
vector<int> in_degree;
fin >> n;
adj.resize(n + 1);
dp.resize(n + 1);
visited.resize(n + 1);
in_degree.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 {
visited[node] = 1;
for (int neigh : adj[node]) {
if (!visited[neigh])
dfs(neigh);
dp[node] = max(dp[node], dp[node] + dp[neigh]);
}
res = max(res, dp[node]);
};
dfs(1);
fout << res << "\n";
return 0;
}