Pagini recente » Cod sursa (job #214915) | Cod sursa (job #522643) | Cod sursa (job #1314614) | Cod sursa (job #1637285) | Cod sursa (job #2823833)
#include <bits/stdc++.h>
using namespace std;
inline void Open(const string Name) {
#ifndef ONLINE_JUDGE
(void)!freopen((Name + ".in").c_str(), "r", stdin);
(void)!freopen((Name + ".out").c_str(), "w", stdout);
#endif
}
vector <int> Gr[16001];
bitset <16001> vis;
int val[16001], dad[16001], dp[16001];
int N, ans = INT_MIN, nod, root;
void dfs(int v) {
vis[v] = 1, dp[v] = val[v];
for(int to : Gr[v]) {
if(vis[to])
continue;
dfs(to);
dp[v] = max(dp[v], dp[v] + dp[to]);
}
}
void solve() {
cin >> N;
for(int i = 1;i <= N;i++)
cin >> val[i];
for(int i = 1, a, b;i < N;i++) {
cin >> a >> b;
Gr[a].emplace_back(b), dad[b] = a;
}
for(int i = 1;i <= N;i++)
if(!dad[i]) {
root = i;
break;
}
dfs(root);
for(int i = 1;i <= N;i++)
ans = max(ans, dp[i]);
cout << ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
Open("asmax");
int T = 1;
for(;T;T--) {
solve();
}
return 0;
}