Cod sursa(job #3265316)

Utilizator AndreiNicolaescuEric Paturan AndreiNicolaescu Data 29 decembrie 2024 10:36:22
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>
#define cin ci
#define cout co
using namespace std;
ifstream cin("stramosi.in");
ofstream cout ("stramosi.out");
const int Lmax = 20;
const int Nmax = 250001;
int n, m, q, p;
int anc[Lmax][Nmax];
void binarylifting()
{
    for(int l=1; l<Lmax; l++)
        for(int node = 1; node <= n; node++)
            anc[l][node] = anc[l-1][anc[l-1][node]];
}
int ans(int node, int nanc)
{
    for(int l=0; l<Lmax; l++)
        if(nanc & (1<<l))
            node = anc[l][node];
    return node;
}
int main()
{
    cin >> n >> m;
    for(int i=1; i<=n; i++)
        cin >> anc[0][i];
    binarylifting();
    for(int i=1; i<=m; i++)
    {
        cin >> q >> p;
        cout << ans(q, p) << '\n';
    }
    return 0;
}