Pagini recente » Cod sursa (job #367550) | Cod sursa (job #313042) | Cod sursa (job #2308683) | Cod sursa (job #2221774) | Cod sursa (job #1512110)
#include <stdio.h>
#define MAX_N 100000
#define LOG 17
int ask[MAX_N];
int d[LOG][MAX_N];
int main(void) {
FILE *f = fopen("cerere.in", "r");
int n, i, u, v, k, q;
fscanf(f, "%d", &n);
for (i = 0; i < n; i++) {
fscanf(f, "%d", &ask[i]);
}
for (i = 1; i < n; i++) {
fscanf(f, "%d%d", &u, &v);
d[0][v - 1] = u - 1;
}
fclose(f);
for (i = 1; (1 << i) <= n; i++) {
for (k = 0; k < n; k++) {
d[i][k] = d[i - 1][d[i - 1][k]];
}
}
f = fopen("cerere.out", "w");
for (i = 0; i < n; i++) {
u = i;
q = 0;
while (ask[u] != 0) {
v = ask[u];
for (k = 0; (1 << k) <= v; k++) {
if ((v >> k) & 1) {
u = d[k][u];
}
}
q++;
}
fprintf(f, "%d ", q);
}
fclose(f);
return 0;
}