Cod sursa(job #3247407)

Utilizator maryyMaria Ciutea maryy Data 7 octombrie 2024 16:13:16
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
const int maxp2=19, nmax=250001;
int stramos[maxp2][nmax];
int n, m;
void PrecalculateAncestors()
{
    for(int i=1; i<maxp2; i++)
    {
        for(int j=1; j<=n; j++)
        {
            stramos[i][j]=stramos[i-1][stramos[i-1][j]];
        }
    }
}
int FindAncestor(int node, int kth)
{
    if(kth>=(1<<maxp2)) return 0;
    for(int i=0; i<maxp2; i++)
        if(kth&(1<<i))
            node=stramos[i][node];
    return node;
}
int main()
{
    int q, p;
    in>>n>>m;
    for(int i=1; i<=n; i++)
    {
        in>>stramos[0][i];
    }
    PrecalculateAncestors();
    for(int i=1; i<=m; i++)
    {
        in>>q>>p;//al p-lea stramos al nodului q
        out<<FindAncestor(q, p)<<'\n';
    }
    return 0;
}