Cod sursa(job #331298)

Utilizator cotofanaCotofana Cristian cotofana Data 13 iulie 2009 16:28:46
Problema Cerere Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>
#define dim 100001

int n, k[dim], p[dim], in[dim], rad, q[dim], sol[dim];

void dfs(int node, int lvl) {
	int i;
	q[lvl]=node;
	
	if (k[node]) sol[node]=sol[q[lvl-k[node]]]+1;
	else sol[node]=0;
	
	for (i=1; i<=n; ++i)
		if (p[i]==node) dfs(i, lvl+1);
}

int main() {
	int i, a, b;
	freopen("cerere.in", "r", stdin);
	freopen("cerere.out", "w", stdout);
	
	scanf("%d\n", &n);
	for (i=1; i<=n; ++i) scanf("%d ", &k[i]);
	for (i=1; i<n; ++i) {
		scanf("%d %d\n", &a, &b);
		p[b]=a;
		++in[b];
	}
	for (rad=1; rad<=n && in[rad]; ++rad) ;
	
	dfs(rad, 1);
	
	for (i=1; i<=n; ++i) printf("%d ", sol[i]);
	printf("\n");
	
	return 0;
}