Pagini recente » Cod sursa (job #1492344) | Cod sursa (job #160250) | Cod sursa (job #1710709) | Cod sursa (job #2597244) | Cod sursa (job #3214097)
#include <bits/stdc++.h>
using namespace std;
string __fname = "asmax"; ifstream in (__fname + ".in"); ofstream out (__fname + ".out");
#define cin in
#define cout out
int n;
int val[16001];
vector<int> adj[16001];
int dp[16001];
int ans = -1e9;
void dfs(int prev, int u){
dp[u] += val[u];
for(auto v : adj[u]){
if(v != prev){
dfs(u, v);
if(dp[v] > 0)
dp[u] += dp[v];
}
}
ans = max(ans, dp[u]);
cerr << u << ' ' << dp[u] << '\n';
}
int main(){
cin >> n;
for(int i = 1; i <= n; i ++){
cin >> val[i];
}
for(int i = 1; i < n; i ++){
int x, y;
cin >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs(-1, 1);
cout << ans;
return 0;
}