Pagini recente » Cod sursa (job #1983464) | Cod sursa (job #2002213) | Cod sursa (job #1064841) | Cod sursa (job #1003664) | Cod sursa (job #1917488)
#include <stdio.h>
#include <iostream>
#include <vector>
#include <climits>
#include <math.h>
#include <stdlib.h>
using namespace std;
int max_sum = 0;
void dfs(vector<vector<int> > &connections, vector<int> &vals, vector<bool> &visited, int curr_node) {
visited[curr_node] = true;
for (int i = 0; i < connections[curr_node].size(); i ++) {
if (!visited[connections[curr_node][i]]) {
visited[connections[curr_node][i]] = true;
dfs(connections, vals, visited, connections[curr_node][i]);
vals[curr_node] = max(vals[curr_node], vals[curr_node] + vals[connections[curr_node][i]]);
}
}
}
int main() {
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
int n;
scanf("%d", &n);
vector<int> vals(n);
for (int i = 0; i < n; i ++) {
scanf("%d", &vals[i]);
}
vector<vector<int> > connections(n);
vector<int> max_from_node = vals;
for (int i = 0; i < n - 1; i ++) {
int a, b;
scanf("%d %d", &a, &b);
connections[a - 1].push_back(b - 1);
connections[b - 1].push_back(a - 1);
}
vector<bool> visited(n, false);
dfs(connections, vals, visited, 0);
int maxi = INT_MIN;
for (int i = 0; i < n; i ++) {
maxi = max(maxi, vals[i]);
}
printf("%d\n", maxi);
return 0;
}