Cod sursa(job #1489540)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 21 septembrie 2015 15:35:29
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>
#include <vector>
#define MAX 16005
#define INF -(1<<30)
using namespace std;

int n, a[MAX], i, x, y, d[MAX], parent[MAX];
vector<int> l[MAX];
bool viz[MAX];

void dfs(int node);

int main(){
	freopen("asmax.in", "r", stdin);
	freopen("asmax.out", "w", stdout);
	scanf("%d", &n);
	for(i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	for(i = 0; i < n - 1; i++){
		scanf("%d%d", &x, &y);
		l[x].push_back(y);
		l[y].push_back(x);
	}
	dfs(1);
	int max = INF;
	for(i = 1; i <= n; i++)
		max = max < d[i] ? d[i] : max;
	printf("%d\n", max);
	return 0;
}

void dfs(int node){
	int i;
	viz[node] = 1;
	d[node] = a[node];
	for(i = 0; i < l[node].size(); i++)
		if(!viz[l[node][i]]){
			parent[l[node][i]] = node;
			dfs(l[node][i]);
		}
	for(i = 0; i < l[node].size(); i++)
		if(d[l[node][i]] > 0 && l[node][i] != parent[node])
			d[node] += d[l[node][i]];
}