Cod sursa(job #3281776)

Utilizator nusuntvictorVictor Stefan nusuntvictor Data 3 martie 2025 16:43:09
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f  // INF mare pentru long long
#define mod 666013
#define N 250001
using namespace std;

ifstream f("stramosi.in");
ofstream g("stramosi.out");

vector<vector<int>>graf(N);
vector<vector<int>>dp(20,vector<int>(N));
vector<int>root;
bitset<N>vis;
int n,m;

void dfs(int nod,int lvl){

    for(int k=1; (1<<k)<=lvl; ++k)
        dp[k][nod]=dp[k-1][dp[k-1][nod]];
    vis[nod]=1;
    for(const auto& vec : graf[nod])
        if(vis[vec]==0)
            dfs(vec,lvl+1);
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    f>>n>>m;
    for(int i=1; i<=n; ++i)
    {
        f>>dp[0][i];
        graf[i].push_back(dp[0][i]);
        graf[dp[0][i]].push_back(i);

        if(dp[0][i]==0)
            root.push_back(i);
    }

    for(const auto& i : root)
        dfs(i,0);

    for(int i=1; i<=m; ++i)
    {
        int q,p;
        f>>q>>p;
        for(int k=0; k<=17; ++k)
            if((1<<k)&p)
                q=dp[k][q];
        g<<q<<'\n';

    }




    return 0;
}