Cod sursa(job #579502)

Utilizator chrisuPirvu Cristina chrisu Data 12 aprilie 2011 10:39:48
Problema Asmax Scor 20
Compilator cpp Status done
Runda lab_arbori Marime 0.75 kb
#include <cstdio>
#include <vector>
#define N 16000
using namespace std;
vector < int > a[N];
int n,val[N],cost[N],sol=-100000;
bool cupcake[N];
void citire()
{
	int i,v,x,y;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&v);
		val[i]=v;
	}
	for(i=1;i<n;i++)
	{
		scanf("%d%d",&x,&y);
		a[x].push_back(y);
		a[y].push_back(x);
	}	
}
void dfs(int x)
{
	int i, valoare;
	valoare=0;
	cupcake[x]=true;
	for(i=0;i<a[x].size();i++)
	{
		int y= a[x][i];
		if(!cupcake[y])
		{
			dfs(y);
			if(val[y]>0);
				valoare+=val[y];
		}
	}
	cost[x]=val[x]+valoare;
	if(sol<cost[x])
		sol=cost[x];	
}

int main()
{
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	citire();
	dfs(1);
	printf("%d",sol);
	return 0;
}