Pagini recente » Cod sursa (job #1826924) | Cod sursa (job #1028980) | Cod sursa (job #1208762) | Cod sursa (job #1595124) | Cod sursa (job #2799296)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 16000;
int n, dp[NMAX + 1], ans = -2e9;
vector<int> adj[NMAX + 1];
inline void dfs(const int X, const int TATA = 0) {
for(const auto &el : adj[X]) {
if(el == TATA) continue;
dfs(el, X);
dp[X] += dp[el] * (dp[el] > 0);
}
ans = max(ans, dp[X]);
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++i) scanf("%d", &dp[i]);
for(int i = 1; i <= n - 1; ++i) {
int x, y;
scanf("%d%d", &x, &y);
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs(1);
printf("%d", ans);
return 0;
}