Pagini recente » Cod sursa (job #1109397) | Cod sursa (job #1052328) | Cod sursa (job #2904771) | Cod sursa (job #3127576) | Cod sursa (job #1132800)
#include <cstdio>
using namespace std;
const long N = 100005;
long n, k [N], t [N], ans [N];
void read () {
long i, a, b;
scanf ("%ld", &n);
for (i = 1; i <= n; i ++) {
scanf ("%ld", &k [i]);
ans [i] = -1;
}
for (i = 1; i < n; i ++) {
scanf ("%ld%ld", &a, &b);
t [b] = a;
}
}
long dfs (long x) {
long i, father;
if (ans [x] != -1)
return ans [x];
//k [x] stramos
if (k [x] == 0)
return 0;
father = x;
for (i = 1; i <= k [x]; i ++)
father = t [father];
return 1 + dfs (father);
}
void solve () {
long i;
for (i = 1; i <= n; i ++)
ans [i] = dfs (i);
for (i = 1; i <= n; i ++)
printf ("%ld ", ans [i]);
printf ("\n");
}
int main () {
freopen ("cerere.in", "r", stdin);
freopen ("cerere.out", "w", stdout);
read ();
solve ();
return 0;
}