Cod sursa(job #714335)

Utilizator balakraz94abcd efgh balakraz94 Data 15 martie 2012 18:00:57
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
#include<algorithm>
#include<vector>
#define infile "asmax.in"
#define outfile "asmax.out"
#define n_max 16005
#define ll long long
#define nxt *it
#define INF 1<<30
#define pb push_back
#define FOR(g) \
	for(vector <int> ::iterator it = g.begin(); it!=g.end(); ++it)
using namespace std;

vector < int > v[n_max];

int Value[n_max];

int N;

ll Sol = -INF;


void citeste()
{
	freopen(infile,"r",stdin);
	
	int x, y;
	
	scanf("%d", &N);
	
	for(int i=1;i<=N;i++)
		scanf("%d", &Value[i]);
	
	for(int i=1; i<N; ++i){
		scanf("%d %d",&x, &y);
		v[x].pb(y);
		v[y].pb(x);
	}
	
	fclose(stdin);
}


ll DF(int x, int tx)
{
	ll Bst = Value[x], rez;
	
	FOR(v[x])
	    if(nxt != tx){
			rez = DF(nxt, x);
			if(rez > 0)
				Bst += rez;
		}

	Bst = max(Bst, (ll) Value[x]);

	Sol = max(Sol, Bst);
	
	return Bst;
}



void afiseaza()
{
	freopen(outfile,"w",stdout);
	
	printf("%lld\n", Sol);
	
	fclose(stdout);
}


int main()
{
	citeste();
	DF(1, 0);
	afiseaza();
	
	return 0;
}