Pagini recente » Cod sursa (job #687682) | Cod sursa (job #214190) | Cod sursa (job #1327305) | Cod sursa (job #2755269) | Cod sursa (job #2766934)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int MAXN = 16000;
int a[MAXN];
vector<int> G[MAXN];
void dfs(int u, int p) {
for (int v : G[u])
if (v != p) {
dfs(v, u);
a[u] += max(0, a[v]);
}
}
void max_self(int &x, int y) {
if (x < y)
x = y;
}
int main() {
int n;
fin >> n;
for (int v = 0; v < n; ++v)
fin >> a[v];
for (int e = 1; e < n; ++e) {
int u, v;
fin >> u >> v;
--u, --v;
G[u].emplace_back(v);
G[v].emplace_back(u);
}
dfs(0, -1);
int ans = a[0];
for (int v = 1; v < n; ++v)
max_self(ans, a[v]);
fout << ans << '\n';
fin.close();
fout.close();
return 0;
}