Pagini recente » Cod sursa (job #246027) | Cod sursa (job #2478622) | Cod sursa (job #1019031) | Cod sursa (job #1363026) | Cod sursa (job #2915850)
#include <fstream>
#include <vector>
using namespace std;
const int MAX_N = 16 * 1e3;
vector<int> g[MAX_N + 1];
int a[MAX_N + 1], sum[MAX_N + 1];
int n;
void dfs(int u, int p = -1) {
sum[u] = a[u];
for (int v : g[u]) {
if (v != p) {
dfs(v, u);
if (sum[v] >= 0) {
sum[u] += sum[v];
}
}
}
}
int main() {
ifstream fin("asmax.in");
ofstream fout("asmax.out");
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> a[i];
}
for (int i = 1; i <= n - 1; i++) {
int u, v;
fin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1);
int answer = 0;
for (int i = 1; i <= n; i++) {
answer = max(answer, sum[i]);
}
fout << answer;
return 0;
}