Cod sursa(job #365527)

Utilizator klamathixMihai Calancea klamathix Data 18 noiembrie 2009 23:03:27
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>
#include<vector>
#define MAXN 16005

int i , j , k , value[MAXN] , best[MAXN] , a, b , n , maxs = -10000000;

using namespace std;

vector < int > sons[MAXN];
bool been[MAXN] ;
void DF ( int node ) 
{
	int i ;

	been[node] = true;
	best[node] = value[node];
	
	for( i = 0 ; i < sons[node].size() ; ++i ) {
		if ( been[sons[node][i]] == false ) {
				DF ( sons[node][i] ) ;
				if ( best[sons[node][i]] > 0 ) 
				best[node] += best[sons[node][i]];
		}
	}
	


}

int main()
{
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	
	scanf("%d",&n);
	
	for( i = 1 ; i <= n; ++i )
		scanf("%d",&value[i]);
	
	for( i = 1 ; i <= n - 1 ; ++i ) {
		scanf("%d %d",&a,&b);
		sons[a].push_back(b);
		sons[b].push_back(a);
	}
	
	DF(1);
	
	for ( i = 1 ; i <= n ; ++i )
		if ( best[i] > maxs ) maxs = best[i];
	
	printf("%d\n",maxs);
		
	
return 0;
}