Pagini recente » Cod sursa (job #1635865) | Cod sursa (job #975705) | Cod sursa (job #1833495) | Cod sursa (job #1315061) | Cod sursa (job #1971493)
#include <cstdio>
#include <vector>
const int MAXN = 1e4 + 6e3;
std::vector <int> g[MAXN + 1];
int cost[MAXN + 1], dp[MAXN + 1];
bool r[MAXN + 1];
void dfs(int u) {
r[u] = 1;
dp[u] = cost[u];
for (int i = 0; i < g[u].size(); ++i) {
if (!r[g[u][i]]) {
dfs(g[u][i]);
if (dp[g[u][i]] > 0) {
dp[u] += dp[g[u][i]];
}
}
}
}
int main() {
int n, sol;
FILE *f = fopen("asmax.in", "r");
fscanf(f, "%d", &n);
for (int i = 1; i <= n; ++i) {
fscanf(f, "%d", cost + i);
}
for (int x, y, i = 0; i < n - 1; ++i) {
fscanf(f, "%d%d", &x, &y);
g[x].push_back(y);
g[y].push_back(x);
}
fclose(f);
dfs(1);
sol = dp[1];
for (int i = 2; i <= n; ++i) {
if (dp[i] > sol) {
sol = dp[i];
}
}
f = fopen("asmax.out", "w");
fprintf(f, "%d\n", sol);
fclose(f);
return 0;
}