Pagini recente » Cod sursa (job #1654368) | Cod sursa (job #541172) | Cod sursa (job #1357157) | Cod sursa (job #315792) | Cod sursa (job #2998523)
#include <bits/stdc++.h>
using namespace std;
const int N = 16016;
vector<int> g[N], a(N);
bool visited[N];
int64_t sum[N];
void dfs(int u) {
visited[u] = true;
sum[u] = a[u];
for(auto v : g[u]) {
if(!visited[v]) { dfs(v); if(sum[v] > 0) sum[u] += sum[v]; }
}
}
int main() {
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
for(int i = 1; i < n; i++) {
int u, v;
scanf("%d%d", &u, &v);
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1);
int64_t mx = -1e18;
for(int i = 1; i <= n; i++) {
mx = max(mx, sum[i]);
}
printf("%lld", mx);
}