Pagini recente » Cod sursa (job #1760848) | Cod sursa (job #312372) | Cod sursa (job #1111025) | Cod sursa (job #191152) | Cod sursa (job #1470130)
#include <stdio.h>
#include <stdlib.h>
#define MN 100001
#define dim 8192
char ax[dim];
int pz;
int N, K, f, c, i;
int q[MN];
int G[MN];
int R[MN];
int ch[MN][150];
void cit(int *x) {
*x = 0;
while (ax[pz] < '0' || ax[pz] > '9') {
++pz;
if (pz == dim) fread(ax, 1, dim, stdin), pz = 0;
}
while (ax[pz] >= '0' && ax[pz] <= '9') {
*x = *x * 10 + ax[pz++] - '0';
if (pz == dim) fread(ax, 1, dim, stdin), pz = 0;
}
}
void dfs(int u, int level) {
int i;
R[u] = (G[u] == 0) ? 0 : R[q[level - G[u]]] + 1;
for (i = 1; i <= ch[u][0]; i++) {
q[level] = u;
dfs(ch[u][i], level + 1);
}
}
int main() {
int cs = 0;
FILE *fi = freopen("cerere.in", "r", stdin);
FILE *fo = freopen("cerere.out", "w", stdout);
cit(&N);
for (i = 1; i <= N; i++) {
cit(&G[i]);
}
for (i = 1; i < N; i++) {
cit(&f), cit(&c);
cs += c;
ch[f][++ch[f][0]] = c;
}
dfs((N * (N + 1)) /2 - cs, 1);
for (i = 1; i <= N; i++) {
printf("%d ", R[i]);
}
fclose(fi);
fclose(fo);
return 0;
}