Pagini recente » Rating cont de incercari (Rares_Ion) | Rating Dragomir Cristian (cristiandrg) | Cod sursa (job #3210876) | Cod sursa (job #2349549) | Cod sursa (job #3294718)
#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> in_degree;
fin >> n;
adj.resize(n + 1);
dp.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);
++in_degree[y];
}
function<void(int)> dfs = [&](int node) -> void {
for (int neigh : adj[node]) {
dfs(neigh);
dp[node] = max(dp[node], dp[node] + dp[neigh]);
}
res = max(res, dp[node]);
};
for (int i = 1; i <= n; ++i)
if (!in_degree[i]) {
dfs(i);
break;
}
fout << res << "\n";
return 0;
}