Cod sursa(job #505932)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 4 decembrie 2010 15:34:32
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
/*
a[i] = v[i] + (a[i].fiu_1 daca a[i].fiu_1 este > 0, a[i].fiu_2 daca a[i].fiu_2 este > 0, ... , a[i].fiu_n daca a[i].fiu_n este > 0)
rasp = max (a[1],a[2],...,a[n])
*/

#include <cstdio>
#include <vector>
using namespace std;

const int N = 16001;

int v[N],a[N],n;

vector<int> vecin[N];

bool vizitat[N];

void citire()
{
	int a,b;
	scanf("%i",&n);
	for (int i = 1; i <= n; ++i)
		scanf("%i",&v[i]);
	for (int i = 1; i <= n-1; ++i)
	{
		scanf("%i%i",&a,&b);
		vecin[a].push_back(b);
		vecin[b].push_back(a);
	}
}

void dfs(int i)
{
	vizitat[i] = true;
	a[i] = v[i];
	for (int k = 0; k < vecin[i].size(); ++k)
	{
		if (vizitat[ vecin[i][k] ])
			continue;
		dfs(vecin[i][k]);
		if (a[ vecin[i][k] ] > 0)
			a[i] += a[ vecin[i][k] ];
	}
}

void cautare_maxim()
{
	int max = a[1];
	for (int i = 2; i <= n; ++i)
		if (a[i] > max)
			max = a[i];
	printf("%i",max);
}

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