Cod sursa(job #3311143)

Utilizator vlad7654vladimir manescu vlad7654 Data 19 septembrie 2025 19:22:14
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
vector<vector<int> > ancestor;
int n, q;
void initializare(){
    ancestor.resize(20, vector<int>(n+1, 0));
}
void binary_lifting(){
    for(int i=1;i<20;i++){
        for(int j=1;j<=n;j++){
            ancestor[i][j]=ancestor[i-1][ancestor[i-1][j]];
        }
    }
}
void interogare(int nod, int stramos){
    if(stramos>=n){
        fout<<0<<'\n';
        return;
    }
    for(int i=0;i<20;i++){
        if((1<<i)&stramos){
            nod=ancestor[i][nod];
        }
    }
    fout<<nod<<'\n';
}
int main(){
    fin>>n>>q;
    initializare();
    for(int i=1;i<=n;i++){
        fin>>ancestor[0][i];
    }
    binary_lifting();
    for(int i=1;i<=q;i++){
        int nod, stramos;
        fin>>nod>>stramos;
        interogare(nod,stramos);
    }
}