Cod sursa(job #42184)

Utilizator IgnitionMihai Moraru Ignition Data 28 martie 2007 22:32:08
Problema Cerere Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 0.58 kb
#include <stdio.h>
#include <string.h>

#define MN (100001)

int N, n[MN], p[MN], cc[MN];

int c(int n1)
{
	if(cc[n1] >= 0)
		return cc[n1];
	int n2;
	cc[n1] = 0;
	for(n2 = n1; n[n1]--; n2 = p[n2]);
	return cc[n1] = c(n2)+1;
}

int main()
{
	int i;

	freopen("cerere.in", "r", stdin);
	freopen("cerere.out", "w", stdout);

	scanf("%d", &N);
	for(i = 0; i < N; ++i)
		scanf("%d", &n[i]);

	for(i = 0; i < N-1; ++i) {
		int n1, n2;
		scanf("%d %d", &n1, &n2); --n1; --n2;
		p[n2] = n1;
	}

	memset(cc, -1, sizeof(cc));
	for(i = 0; i < N; ++i)
		printf("%d ", c(i)-1);
	printf("\n");

	return 0;
}