Cod sursa(job #2723889)

Utilizator levladiatorDragutoiu Vlad-Ioan levladiator Data 15 martie 2021 19:10:54
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define pf push_front
#define ll long long
#define ull unsigned long long
#define x first
#define y second
#define pi pair<int,int>
#define pl pair<ll,ll>

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

const ll N=1e5+5,INF=1e18,MOD=666013,M=1e2+5,inf=INT_MAX;

int n,m;
int dp[250005][19];
int tata[250005];
vector<int> fii[250005];

void dfs(int nod,int nivel)
{
    dp[nod][0]=tata[nod];
    for(int i=1;(1<<i)<nivel;i++)
    {
        dp[nod][i]=dp[dp[nod][i-1]][i-1];
    }
    for(int i=0;i<fii[nod].size();i++)
    {
        dfs(fii[nod][i],nivel+1);
    }
}

int par(int a,int b)
{
    int ans=a;
    for(int bit=19;bit>=0;bit--)
    {
        if((1<<bit)&b)ans=dp[ans][bit];
    }
    return ans;
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        fin>>x;
        tata[i]=x;
        fii[x].pb(i);
    }
    for(int i=1;i<=n;i++)
    {
        if(tata[i]==0)
        {
            dfs(i,1);
        }
    }
    for(int i=1;i<=m;i++)
    {
        int a,b;
        fin>>a>>b;
        fout<<par(a,b)<<'\n';
    }

}