Cod sursa(job #3345689)

Utilizator mtcmtcmtc mtc mtcmtc Data 10 martie 2026 17:15:54
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
int up[250005][20];
vector<int>adj[250005];
void dfs(int nod,int ant){
    up[nod][0]=ant;
    for(int i=1;i<20;i++){
        up[nod][i]=up[up[nod][i-1]][i-1];
    }
    for(auto e:adj[nod]){
        if(e!=ant) dfs(e,nod);
    }
}
int query(int nod,int p){
    for(int i=19;i>=0;i--){
        if(p>=(1<<i)){
            nod=up[nod][i];
            p-=(1<<i);
        }
    }
    return nod;
}
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        adj[x].push_back(i);
        adj[i].push_back(x);
    }
    dfs(0,0);
    while(m--){
        int nod,p;
        cin>>nod>>p;
        cout<<query(nod,p)<<'\n';
    }
    return 0;
}