Cod sursa(job #758328)

Utilizator matei_cChristescu Matei matei_c Data 15 iunie 2012 10:38:56
Problema Asmax Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 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 coada[maxn] ;
int sel[maxn] ;

int main()
{
	
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	
	scanf("%d",&n);
	int maxim = -INF ;
	for(int i=1;i<=n;++i)
	{	
		scanf("%d",&v[i]);
		if( v[i] > maxim )
			maxim = 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 smax = maxim ;
	int sum ;
	for(int i=1;i<=n;++i)
	{
		
		int len = 1 ;
		coada[1] = i ;
		sel[i] = 1 ;
		sum = v[i] ;
		for(int j=1;j<=len;++j)
		{
			int nod_act = coada[j] ;
			for(size_t k=0;k<vecini[nod_act].size();++k)
			{
				if( v[ vecini[nod_act][k] ] >= 0 && sel[ vecini[nod_act][k] ] == 0 )
				{
					++len ;
					coada[len] = vecini[nod_act][k] ;
					sel[ vecini[nod_act][k] ] = 1 ;
					sum += v[ vecini[nod_act][k] ] ;
					if( sum > smax )
						smax = sum ;
				}	
			}	
		}
		memset(sel,0,sizeof(sel));
			
	}
	
	printf("%d\n",smax);
	
	return 0;
	
}