Pagini recente » Cod sursa (job #1115462) | Cod sursa (job #347188) | Cod sursa (job #266251) | Cod sursa (job #1914256) | Cod sursa (job #2507279)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("asmax.in");
ofstream fo("asmax.out");
const int NMAX = 16005;
int n;
int val[NMAX];
bool viz[NMAX];
int dp[NMAX];
vector <int> G[NMAX];
void dfs(int nod) {
viz[nod] = 1;
dp[nod] = val[nod];
for (auto x: G[nod])
if (!viz[x]) {
dfs(x);
if (dp[x] > 0)
dp[nod] += dp[x];
}
}
int main()
{
fi >> n;
for (int i = 1; i <= n; i++) {
fi >> val[i];
}
for (int i = 1; i < n; i++) {
int u, v;
fi >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
dfs(1);
int ans = -1005;
for (int i = 1; i <= n; i++)
ans = max(ans, dp[i]);
fo << ans;
return 0;
}