Pagini recente » Cod sursa (job #1298222) | Cod sursa (job #2591053) | Cod sursa (job #2883219) | Cod sursa (job #1664657) | Cod sursa (job #2823838)
#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], dp[16001];
int N, ans = INT_MIN, nod, root;
void dfs(int v, int dad = -1) {
vis[v] = 1, dp[v] = val[v];
for(int to : Gr[v]) {
if(to == dad)
continue;
dfs(to, v);
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);
Gr[b].emplace_back(a);
}
dfs(1);
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;
}