Cod sursa(job #569992)

Utilizator avram_florinavram florin constantin avram_florin Data 2 aprilie 2011 13:13:12
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
#include<cstdio>
#include<vector>
#include<iostream>
#define pb push_back
#define MaxN 16005

using namespace std;

int n,m,v[MaxN],dp[MaxN],viz[MaxN];
vector <int> G[MaxN];
int sol = -0x3f3f3f3f;

void dfs(int nod)
{
	if( !viz[nod] )
		{
			viz[nod] = 1;
			vector<int>::iterator it;
			for( it = G[nod].begin() ; it < G[nod].end() ; it++ )
				{
					if( !viz[*it] )
						{
							dfs(*it);
							if( dp[*it] > 0 )
								dp[nod] += dp[*it];
						}
					if( dp[nod] > sol )
						sol = dp[nod];
				}
		}
}

int main(void)
{
	freopen("f.in" , "r" , stdin );
	freopen("g.out" , "w" , stdout );
	scanf("%d" , &n );
	int i,x,y;
	for( i = 1 ; i <= n ; dp[i] = v[i] , i++ )
		scanf("%d" , &v[i]);
	for( i = 1 ; i <= n ; i++ )
		{
			scanf("%d%d" , &x , &y );
			G[x].pb(y);
			G[y].pb(x);
		}
	dfs(1);
	printf("%d\n" , sol );
	return 0;
}