Cod sursa(job #622160)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 17 octombrie 2011 16:10:23
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>
#include <math.h>
#include <vector>

#define M 100010

using namespace std;

long n, a, b, i, S[M], ma[M], f[M];

vector < long > V[100010];

void df(long nod) {
	
	S[++S[0]] = nod;	
	if (ma[nod] == 0) f[nod] = 0;
	else f[nod] = f[S[S[0] - ma[nod]]] + 1;
	long len = V[nod].size();
	for (long i = 0; i < len; ++i) {
		long aux = V[nod][i];
		df(aux);
		--S[0];
	}
}

int main() {
	freopen("cerere.in", "r", stdin);
	freopen("cerere.out", "w", stdout);
	
	scanf("%ld", &n);
	for (i = 1; i <= n; ++i) scanf("%ld", &ma[i]);
	for (i = 1; i < n; ++i) {
		scanf("%ld %ld", &a, &b);
		V[a].push_back(b);
	}
	
	df(1);
	
	for (i = 1; i <= n; ++i) {
		printf("%ld ", f[i]);
	}
	return 0;
}