Cod sursa(job #910576)

Utilizator MtkMarianHagrSnaf MtkMarian Data 10 martie 2013 21:23:28
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<cstdio>
#include<vector>
using namespace std;
#define NMAX 16002

int N;
int SUM=-1111;
int MAX = -1000;
int rad=1;
int V[NMAX],SUMN[NMAX];
vector< int >L[NMAX];


void citeste()
{
	scanf("%d",&N);
	for (int i = 1; i <= N ; i++)
	{
		scanf("%d",&V[i]);
		if(MAX < V[i]) 
		{
			rad=i;
			MAX=V[i];
		}
		SUMN[i]=-1001;
	}
	int x,y;
	for (int i = 1; i < N ; i++)
	{
		scanf("%d %d",&x,&y);
		L[x].push_back(y);
		L[y].push_back(x);
	}

}
void df(int nod)
{
	SUMN[nod]=V[nod];
	for(int i=0; i<L[nod].size(); ++i)
	{
		if(SUMN[L[nod][i]] == -1001)
		{
			df(L[nod][i]);
			if( SUMN[nod]+SUMN[L[nod][i]]>SUMN[nod] )SUMN[nod]+=SUMN[L[nod][i]];
		}
	}
	if(SUMN[nod]>SUM)
	{
			SUM=SUMN[nod];
			
	}
}	

void afisare()
{
	printf("%d\n",N);
	for (int i = 1; i <= N ; i++)
	{
		printf("\nLista de adiacenta a nodului %d valoare %d\n",i,V[i]);
		for(int j=0;j<L[i].size();++j)
		{
	        printf("%d\t",L[i][j])		;
		}
		
	}
	

}

int main()
{
	freopen("asmax.in", "r",stdin);
	freopen("asmax.out","w",stdout);
	citeste();
	df(rad);
	//afisare();
	printf("%d\n",SUM);

	return 0;
}