Pagini recente » Cod sursa (job #2242981) | Cod sursa (job #1164816) | Cod sursa (job #902757) | Cod sursa (job #1509566) | Cod sursa (job #1922555)
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second
#define pii pair<int, int>
#define mp make_pair
using namespace std;
const string name = "asmax",
in_file = name + ".in",
out_file = name + ".out";
ifstream fin(in_file);
ofstream fout(out_file);
const int MAX = 1.6e4 + 5;
int n;
int total_sum;
int value[MAX];
int sum[MAX];
int father[MAX];
vector<int> tree[MAX];
void dfs(int node, int father_node) {
sum[node] = value[node];
father[node] = father_node;
for (int adj : tree[node]) {
if (adj != father_node) {
dfs(adj, node);
if (sum[adj] > 0) {
sum[node] += sum[adj];
}
}
}
}
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> value[i];
total_sum += value[i];
}
if (n == 1) {
fout << total_sum;
return 0;
}
for (int a, b, i = 1; i < n; i++) {
fin >> a >> b;
tree[a].push_back(b);
tree[b].push_back(a);
}
dfs(1, 1);
int max_sum = 1 - (1 << 30);
for (int i = 1; i <= n; i++) {
for (int adj : tree[i]) {
if (adj != father[i]) {
max_sum = max(max_sum, sum[adj] + value[i]);
max_sum = max(max_sum, sum[adj]);
}
}
max_sum = max(max_sum, total_sum - sum[i] + value[i]);
max_sum = max(max_sum, total_sum - sum[i]);
}
fout << max_sum;
return 0;
}