Cod sursa(job #126527)

Utilizator andrei.12Andrei Parvu andrei.12 Data 22 ianuarie 2008 13:30:30
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#include<algorithm>
#define lg 6005

using namespace std;

int n, pt[lg], d[lg][3], tata, rt[lg], x, y, rezultat, nr[lg], *v[lg], i;
void df(int nod, int str){
	int i;
	
	for (i = 1; i <= nr[nod]; i ++)
		df(v[nod][i], nod);
	
	d[nod][1] += pt[nod];
	d[str][1] += d[nod][2];
}
int main()
{
	freopen("a.in", "rt", stdin);
	freopen("a.out", "wt", stdout);
	
	scanf("%d", &n);
	for (i = 1; i <= n; i ++)
		scanf("%d", &pt[i]);
	
	for (i = 1; i < n; i ++){
		scanf("%d%d", &x, &y);
		//tt[y] = x;
		nr[y] ++;
		v[y] = (int*)realloc(v[y], (nr[y]+1)*sizeof(int));
		v[y][nr[y]] = x;
		rt[x] = 1;
	}
	for (i = 1; i <= n; i ++)
		if (!rt[i])
			tata = i;
	
	df(tata, 0);
	
	rezultat = max(d[tata][1], d[tata][2]);
	printf("%d\n", rezultat);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}