Pagini recente » Cod sursa (job #2679673) | Cod sursa (job #2801994) | Cod sursa (job #516367) | Cod sursa (job #1646430) | Cod sursa (job #1470057)
#include <stdio.h>
#include <stdlib.h>
typedef struct nod {
int idx, r, g;
struct nod *child, *next;
} nod;
int N, K, G, f, c, i;
nod **mks;
int q[100001];
void dfs(nod *m, nod *p, int level) {
nod *c;
m->r = (m->g == 0) ? 0 : mks[q[level - m->g]]->r + 1;
c = m->child;
while(c) {
q[level] = m->idx;
dfs(c, m, level + 1);
c = c->next;
}
}
int main() {
int cs = 0;
FILE *fi = freopen("cerere.in", "r", stdin);
FILE *fo = freopen("cerere.out", "w", stdout);
scanf("%d", &N);
mks = (nod**) malloc(sizeof(nod*) * (N+1));
for (i = 1; i <= N; i++) {
scanf("%d", &G);
mks[i] = (nod*) malloc(sizeof(nod));
mks[i]->idx = i;
mks[i]->g = G;
}
for (i = 1; i < N; i++) {
scanf("%d %d", &f, &c);
cs += c;
mks[c]->next = mks[f]->child;
mks[f]->child = mks[c];
}
dfs(mks[(N * (N + 1)) /2 - cs], NULL, 1);
for (i = 1; i <= N; i++) {
printf("%d ", mks[i]->r);
}
fclose(fi);
fclose(fo);
return 0;
}