Cod sursa(job #80333)

Utilizator cosminpdrfischer2004 cosminp Data 27 august 2007 14:42:56
Problema Asmax Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <vector>
#include <list>
#include <stdio.h>
#include <fstream>

#define MAXN 16001
#define INF 2000000000

using namespace std; 

vector< list<int> > A(MAXN);
int V[MAXN]; 
int viz[MAXN]; 

int N, SMAX = -INF; 

void dfs(int k, int &S)
{
	int S1 = 0, S2 = 0; 
	list<int>::iterator it; 
	
	viz[k] = 1;
		
	for (it = A[k].begin(); it != A[k].end(); it++)
		if (!viz[*it]) 
		{
			dfs(*it, S1); 
			if (S1 > SMAX)
				SMAX = S1; 
			if (S1 > 0)
				S2 += S1; 
		}
	
	S2 += V[k]; 
	if (S2 > SMAX) 
		SMAX = S2; 
	S = S2; 
}

int main()
{
	int i, x, y; 
	int S = 0; 
	
	freopen("asmax.in", "rt", stdin);
	freopen("asmax.out", "wt", stdout);
	
	scanf("%d", &N);
	for (i = 0; i < N; i++)
		scanf("%d", &V[i+1]);
	for (i = 0; i < N-1; i++)
	{
		scanf("%d %d", &x, &y);
		A[x].push_back(y), A[y].push_back(x);
	}	
	fclose(stdin); 
	
	dfs(1, S); 
	
	printf("%d", S);
	fclose(stdout); 
	return 0;
}