Pagini recente » Cod sursa (job #1726762) | Cod sursa (job #1454476) | Cod sursa (job #2533958) | Cod sursa (job #1877252) | Cod sursa (job #1699617)
#include <stdio.h>
#define Nadejde 250000
#define BASE 10
#define MAX_LOG 5
int N, M;
int dad[MAX_LOG + 1][Nadejde + 1];
int shl[MAX_LOG + 1];
int level[Nadejde + 1];
int d(int u) {
if (u == 0) {
return 0;
}
if (level[u]) {
return level[u];
}
level[u] = 1 + d(dad[0][u]);
return level[u];
}
int main(void) {
int i, u, x;
FILE *f = fopen("stramosi.in", "r");
shl[0] = 1;
for (i = 1; i <= MAX_LOG; i++) {
shl[i] = shl[i - 1] * BASE;
}
fscanf(f, "%d %d", &N, &M);
for (u = 1; u <= N; u++) {
fscanf(f, "%d", &dad[0][u]);
}
for (i = 1; i <= MAX_LOG; i++) {
for (u = 1; u <= N; u++) {
dad[i][u] = dad[i - 1][dad[i - 1][u]];
}
}
freopen("stramosi.out", "w", stdout);
while (M) {
fscanf(f, "%d %d", &u, &x);
if (x > d(u)) {
u = 0;
} else {
for (i = MAX_LOG; i >= 0; i--) {
while (x >= shl[i]) {
u = dad[i][u];
x -= shl[i];
}
}
}
fprintf(stdout, "%d\n", u);
M--;
}
fclose(f);
fclose(stdout);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}