Cod sursa(job #2397166)

Utilizator T_george_TGeorge Teodorescu T_george_T Data 4 aprilie 2019 11:16:09
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("lca.in");
ofstream out("lca.out");
#define NMAX 250004
#define LMAX 30
int n,m,father[LMAX][NMAX],Lg[NMAX],depth[NMAX];
int papa(int node,int x){
    for(int i=0;(1<<i)<=x;i++){
        if(x&(1<<i))
            node=father[i][node];
    }
    return node;
}
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++){
        int a;
        in>>a;
        if(a)
      father[0][i]=a;
    }
    for(int k=1;k<=25;k++){
    for(int i=1;i<=n;i++)
        father[k][i]=father[k-1][father[k-1][i]];
    }
    for(int i=1;i<=m;i++){
        int st,dr;
        in>>st>>dr;
        out<<papa(st,dr)<<endl;
    }
    return 0;
}