Cod sursa(job #2714026)

Utilizator PulpysimusJurjiu Tandrau Darius Stefan Pulpysimus Data 1 martie 2021 10:27:07
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int lookup[18][250001],n,m,parents[250001],powers[20];
int HighestPower (int x)
{
    int p =(int)floor(log2(x));
    return p;
}

void BuildTable()
{
    int i,j;
    for(j=1;j<=log2(n);j++)
        for(i=1;i<=n;i++)
        {
            lookup[j][i]=lookup[j-1][lookup[j-1][i]];

        }

}
int DFS(int node,int dist)
{
    int x=HighestPower(dist);
    if(dist!=0)  return DFS(lookup[x][node],dist-powers[x]);
    else return node;
}
int main()
{
     f>>n>>m;
int i,a,b;
    for(i=1;i<=n;i++)
    {
        f>>lookup[0][i];



    }
    for(i=0;i<=17;i++)
        powers[i]=(1<<i);


    BuildTable();
    for(i=1;i<=m;i++)
    {
        f>>a>>b;

       if(b==1) g<<lookup[0][a]<<"\n";
       else g<<DFS(a,b)<<"\n";
    }

}