Cod sursa(job #1917488)

Utilizator delia_ioanaCeapa Delia Ioana delia_ioana Data 9 martie 2017 12:23:23
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#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;
}