Cod sursa(job #1002076)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 26 septembrie 2013 20:34:27
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <cstdio>
#include <vector>
using namespace std;

int k[100005];
int stk[100005],stp;
int res[100005];
vector <int> v[100005];
int n;

void dfs(int n) {
	stk[stp] = n;
	if (k[n] == 0) res[n] = 0;
	else res[n] = res[stk[stp-k[n]]]+1;
	stp++;
	while (!v[n].empty()) {
		int nod = v[n].back(); v[n].pop_back();
		dfs(nod);
	}
	stp--;
}

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