Cod sursa(job #364484)

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

using namespace std;

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

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

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);
	}
	
	for(i=n;i>0;--i){
		for(j=0;j<mat[i]->copii.size();j++)
			if(mat[mat[i]->copii[j]]->max>0)
				mat[i]->max+=mat[mat[i]->copii[j]]->max;
	}
	
	gmax=mat[1]->max;
	for(i=2;i<=n;i++)
		if(mat[i]->max>gmax)
			gmax=mat[i]->max;
		
	
	printf("%d",gmax);
	
	return 0;
}