Cod sursa(job #135060)

Utilizator andrei.12Andrei Parvu andrei.12 Data 12 februarie 2008 21:29:25
Problema Asmax Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
#include<vector>

using namespace std;

#define infinit 0x3f3f3f3f
#define lg 16005

int n, i, rsp[lg], fst[lg], val[lg], nr[lg], mx, x, y, pus[lg];
vector<int> v[lg];
void df(int nod, int str){
	int i;
	
	fst[nod] = 1;
	
	for (i = 0; i < nr[nod]; i ++)
		if (!fst[v[nod][i]])
			df(v[nod][i], nod);
	
	rsp[nod] += val[nod];
	if (rsp[nod] > 0)
		rsp[str] += rsp[nod];
	fprintf(stderr, "pentru nodul %d este %d\n", nod, rsp[nod]);
}
int main()
{
	freopen("asmax.in", "rt", stdin);
	freopen("asmax.out", "wt", stdout);
	
	scanf("%d", &n);
	for (i = 1; i <= n; i ++)
		scanf("%d", &val[i]);
	for (i = 1; i < n; i ++){
		scanf("%d%d", &x, &y);
		
		nr[x] ++;
		v[x].push_back(y);
		
		nr[y] ++;
		v[y].push_back(x);
	}
	
	df(1, 0);
	
	mx = -infinit;
	for (i = 1; i <= n; i ++)
		if (rsp[i] > mx)
			mx = rsp[i];
	
	printf("%d\n", mx);
	
	return 0;
}