Pagini recente » Cod sursa (job #896930) | Cod sursa (job #1912092) | Cod sursa (job #883819) | Cod sursa (job #1552596) | Cod sursa (job #833920)
Cod sursa(job #833920)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>
using namespace std;
const int MAXN = 16001;
int n;
vector<int> G[MAXN];
int cost[MAXN];
bool viz[MAXN];
long sum[MAXN];
void max_sum(int node)
{
viz[node] = true;
sum[node] = cost[node];
vector<int>::iterator neigh;
for (neigh = G[node].begin(); neigh != G[node].end(); ++neigh) {
if (viz[*neigh]) continue;
max_sum(*neigh);
sum[node] = max(sum[node], sum[node] + sum[*neigh]);
}
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &cost[i]);
int max_in = 0;
vector<int> poss;
for (int i = 0; i < n - 1; ++i) {
int x, y; scanf("%d %d", &x, &y);
G[x].push_back(y);
G[y].push_back(x);
}
max_sum(1);
printf("%ld\n", *max_element(sum + 1, sum + n + 1));
return 0;
}