Pagini recente » Cod sursa (job #1692191) | Cod sursa (job #432019) | Cod sursa (job #2450349) | Cod sursa (job #948222) | Cod sursa (job #2646921)
#include <bits/stdc++.h>
#define ll long long
#define MAXN 16001
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
vector<int> edges[MAXN];
int val[MAXN], sum[MAXN];
int max_sum = INT_MIN;
bitset<MAXN> visited;
void dfs(int start) {
visited[start] = 1;
sum[start] = val[start];
for(int i = 0; i < edges[start].size(); i++) {
if(!visited[edges[start][i]]) {
dfs(edges[start][i]);
if(sum[edges[start][i]] > 0)
sum[start] += sum[edges[start][i]];
}
}
max_sum = max(max_sum, sum[start]);
}
int main() {
int n;
fin >> n;
for(int i = 1; i <= n; i++)
fin >> val[i];
for(int i = 1; i < n; i++) {
int x, y;
fin >> x >> y;
edges[x].push_back(y);
edges[y].push_back(x);
}
dfs(1);
fout << max_sum;
return 0;
}