Pagini recente » Cod sursa (job #3130866) | Istoria paginii utilizator/pestcontrol138 | Cod sursa (job #822052) | Profil liviu12345 | Cod sursa (job #3281776)
#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;
}