Cod sursa(job #3301708)

Utilizator Octa-pe-infoNechifor Octavian Octa-pe-info Data 29 iunie 2025 12:22:30
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

vector<vector<int>>rmq,tabel;

vector<int>pr,niv;

void dfs(int nod,int pr){

    for(auto i : tabel[nod]){

        if(i==pr)
            continue;

        rmq[i][0] = nod;
        dfs(i,nod);
    }
}

void build(int n){

    for(int i=1;i<=18;i++){

        for(int j=1;j<=n;j++){

            rmq[j][i] = rmq[rmq[j][i-1]][i-1];
        }
    }
}

void qeu(int nod,int p){

    for(int i=17;i>=0;i--){

        if((p & (1 << i)))
            nod = rmq[nod][i];
    }

    fout<<nod<<'\n';
}

int main()
{

    int n,m;

    fin>>n>>m;

    tabel.resize(n+1);
    rmq.resize(n+1,vector<int>(19));

    int root=0;

    for(int i=1;i<=n;i++){

        int tata;
        fin>>tata;

        if(tata == 0)
            tabel[0].push_back(i);
        else
            tabel[tata].push_back(i);
    }

    rmq[0][0] = 0;

    dfs(0,0);

    build(n);

    while(m--){

        int q,p;
        fin>>q>>p;

        qeu(q,p);
    }

    return 0;
}