Cod sursa(job #364479)

Utilizator undogSavu Victor Gabriel undog Data 15 noiembrie 2009 21:02:32
Problema Asmax Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <cstdio>
#include <vector>

using namespace std;

struct node{
	int max;
	int val;
	vector<int> copii;
};

node* mat[16000];
int gmax=-1000000;

int getmax(int p){
	int i,t;
	for(i=0;i<mat[p]->copii.size();++i){
		t=getmax(mat[p]->copii[i]);
		if(t>0)
			mat[p]->max+=t;
	}
	
	if(mat[p]->max>gmax)
		gmax=mat[p]->max;
	return mat[p]->max;
}

int main(){
	freopen("asmax.in","rt",stdin);
	freopen("asmax.out","wt",stdout);
	
	int n,i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		mat[i]=new node;
		scanf("%d",&(mat[i]->val));
		mat[i]->max=mat[i]->val;
	}
	int a,b;
	for(i=1;i<n;i++){
		scanf("%d%d",&a,&b);
		if(a<b)
			mat[a]->copii.push_back(b);
		else
			mat[b]->copii.push_back(a);
	}
	
	getmax(1);
	
	printf("%d",gmax);
	
	return 0;
}