Cod sursa(job #1569298)

Utilizator usermeBogdan Cretu userme Data 15 ianuarie 2016 12:08:54
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>
#include <vector>

using std::vector;

const int MAX_N = 250000;
const int LOG_MAX_N = 18;

int N, M;

int depth[1 + MAX_N];
int father[1 + LOG_MAX_N][1 + MAX_N];

int main() {
  int i, j;
  freopen("stramosi.in", "r", stdin);
  freopen("stramosi.out", "w", stdout);
  scanf("%d %d", &N, &M);
  for (i = 1; i <= N; i++) {
    scanf("%d", &father[0][i]);
  }
  for (i = 1; i <= LOG_MAX_N; i++) {
    for (j = 1; j <= N; j++) {
      father[i][j] = father[i - 1][father[i - 1][j]];
    }
  }
  for (i = 1; i <= M; i++) {
    int node, level;
    scanf("%d %d", &node, &level);
    for (j = 0; level > 0; j++, level >>= 1) {
      if ((level & 1) > 0) {
        node = father[j][node];
      }
    }

    printf("%d\n", node);
  }
  return 0;
}