Cod sursa(job #758339)

Utilizator matei_cChristescu Matei matei_c Data 15 iunie 2012 11:01:40
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;

#define maxn 16001
#define INF 2000000000

int n;
int v[maxn];
vector <int> vecini[maxn] ;
int smax = - INF ; 
int sel[maxn] ;

int df(int nod)
{
	
	int sum = v[nod];
	sel[nod] = 1 ;
	
	
	for(size_t i=0;i<vecini[nod].size();++i)
		if( sel[ vecini[nod][i] ] == 0 )
			sum += df ( vecini[nod][i] ) ;
			
	
	if(sum > smax )
		smax = sum;
	if( sum < 0 ) 
		sum = 0;
	
	return sum ;
	
}

int main()
{
	
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	
	scanf("%d",&n);
	smax = -INF ;
	for(int i=1;i<=n;++i)
	{	
		scanf("%d",&v[i]);
		if( v[i] > smax )
			smax = v[i] ;
	}		
	for(int i=1;i<n;++i)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		vecini[a].push_back(b);
		vecini[b].push_back(a);
	}
	
	
	int x = df(1) ;
	
	printf("%d\n", smax);
	
	return 0;
	
}