Cod sursa(job #2398808)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 6 aprilie 2019 10:41:22
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>

#define NMAX 250000
#define MMAX 300000
#define LOGMAX 24
using namespace std;

int father [ NMAX + 1 ] [ LOGMAX + 1 ] ;

inline void precalc (int n) {
  int i, j;
  for (i = 1 ; i <= n ; i++ )
    for (j = 1 ; j < LOGMAX ; j++ )
    father[i][j] = father[father[i][j-1]][j-1] ;
}

inline int fadar (int nod, int x ) {
  int j ;
  for (j = 0 ; (1 << j) <= x ; j++ ) {
    if ( ( (1 << j ) & x ) != 0 )
      nod = father[nod][j] ;
  }
  return nod ;
}

int main() {

  FILE *fin, *fout ;
  fin = fopen ("stramosi.in", "r" ) ;
  fout = fopen ("stramosi.out", "w" ) ;
  int n, m, i, v, x;
  fscanf (fin, "%d%d", &n, &m ) ;
  for (i = 1 ; i <= n ; i++ )
    fscanf (fin, "%d", &father[i][0] ) ;
  precalc(n) ;
  for (i = 1 ; i <= m ; i++) {
    fscanf (fin, "%d%d", &v, &x ) ;
    fprintf (fout, "%d\n", fadar(v, x) ) ;
  }
  return 0;
}