Pagini recente » Cod sursa (job #1308775) | Cod sursa (job #1732976) | Cod sursa (job #117957) | Cod sursa (job #1373576) | Cod sursa (job #2840076)
/* [A][M][C][B][N] / [K][R][I][P][6][8] */
#include <bits/stdc++.h>
using namespace std;
const int mod = 104659, inf = 0x3f3f3f3f;
const char sp = ' ', nl = '\n';
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n;
vector<int> v;
vector<long long> dp;
vector<vector<int>> e;
long long ans = -inf;
void dfs(int node) {
for (auto& son : e[node]) {
for (int i = 0; i < e[son].size(); ++i) {
if (e[son][i] == node) {
e[son].erase(e[son].begin() + i);
break;
}
}
}
for (auto& son : e[node]) {
dfs(son);
}
}
void solve(int node) {
dp[node] = v[node];
for (auto& son : e[node]) {
solve(son);
if (dp[son] > 0)
dp[node] += dp[son];
}
ans = max(ans, dp[node]);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
fin >> n;
v.assign(n + 2, 0), dp.assign(n + 2, 0);
e.assign(n + 2, vector<int>());
for (int i = 1; i <= n; ++i)
fin >> v[i];
for (int i = 1; i < n; ++i) {
int a, b;
fin >> a >> b;
e[a].push_back(b);
e[b].push_back(a);
}
dfs(1);
solve(1);
fout << ans;
}