Cod sursa(job #529643)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 5 februarie 2011 16:48:12
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
#include<vector>
using namespace std;

FILE*f=fopen("asmax.in","r");
FILE*g=fopen("asmax.out","w");

int A[16005],i,N,a,b,S[16005],Smax;
char Viz[16005];
vector<int>W[16005];

void dfs(int nod){
	Viz[nod] = 1;
	vector<int>::iterator itt;
	for ( itt = W[nod].begin() ; itt != W[nod].end() ; ++itt ){
		if ( !Viz[*itt] )
			dfs(*itt);
	}
	
	S[nod] = A[nod];
	for ( itt = W[nod].begin() ; itt != W[nod].end() ; ++itt ){
		if ( S[*itt] > 0 )
			S[nod] += S[*itt];
	}
	if ( S[nod] > Smax )
		Smax = S[nod];
	
}

int main () {
	
	fscanf(f,"%d",&N);
	for ( i = 1 ; i <= N ; ++i )
		fscanf(f,"%d",&A[i]);
	for ( i = 1 ; i < N ; ++i ){
		fscanf(f,"%d %d",&a,&b);
		W[a].push_back(b);
		W[b].push_back(a);
	}
	Smax = -1<<29;
	dfs(1);
	
	fprintf(g,"%d\n",Smax);
	
	fclose(f);
	fclose(g);
	
	return 0;
}