Pagini recente » Cod sursa (job #1388480) | Cod sursa (job #2586547) | Cod sursa (job #1829489) | Cod sursa (job #1812114) | Cod sursa (job #1857770)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int N_MAX = 16e3 + 1;
int n;
vector <int> graph[N_MAX];
vector <int> values, sum(N_MAX);
bitset <N_MAX> visited;
void read() {
int x, y;
fin >> n;
values.emplace_back(0);
for (int i = 1; i <= n; ++i) {
fin >> x;
values.emplace_back(x);
}
for (int i = 1; i < n; ++i) {
fin >> x >> y;
graph[x].emplace_back(y);
graph[y].emplace_back(x);
}
}
void dfs(int node) {
visited.set(node);
sum[node] = values[node];
for (const auto &son : graph[node]) {
if (!visited[son]) {
dfs(son);
if (sum[son] > 0) {
sum[node] += sum[son];
}
}
}
}
void solve() {
for (int i = 1; i <= n; ++i) {
if(!visited[i]) {
dfs(i);
}
}
int maxim = sum[1];
for (const auto &i : sum) {
if (i > maxim) {
maxim = i;
}
}
fout << maxim;
}
int main() {
read();
solve();
return 0;
}