Cod sursa(job #634245)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 15 noiembrie 2011 21:21:49
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#include <vector>

using namespace std;

#define file_in "asmax.in"
#define file_out "asmax.out"

#define nmax 16010

int N;
int a,b;
int i,sol;
vector<int> G[nmax];
int V[nmax];
int A[nmax];
int viz[nmax];

void dfs(int nod){
	
	if (viz[nod])
		return ;
	
	viz[nod]=1;
	
	A[nod]=V[nod];
	
	vector<int> ::iterator it;

	for (it=G[nod].begin();it!=G[nod].end();++it)
		 if (!viz[*it]){
		     dfs(*it);
             if (A[*it]>0)			 
			 A[nod]+=A[*it];
		 }
	 if (sol<A[nod])
		sol=A[nod];		 
}

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d", &N);
	for (i=1;i<=N;++i)
		 scanf("%d", &V[i]);
	
	for (i=1;i<N;++i){
		scanf("%d %d", &a, &b);
		
		G[a].push_back(b);
		G[b].push_back(a);
	}
	
	sol=-0x3f3f3f3f;
	
	for (i=1;i<=N;++i)
		 if (!viz[i])
			 dfs(i);
		 
	printf("%d", sol);

	return 0;
	
}