Cod sursa(job #622160)
#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;
}