Pagini recente » Cod sursa (job #2324389) | Cod sursa (job #2190781) | Cod sursa (job #2204155) | Cod sursa (job #340709) | Cod sursa (job #2810438)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int maxN = 255005, maxLg = 20;
int n, nq;
int s[maxN][maxLg + 5], depth[maxN];
vector <int> G[maxN];
void dfs(int nod, int d)
{
depth[nod] = d;
for(int i = 1; i <= maxLg; i++)
s[nod][i] = s[s[nod][i - 1]][i - 1];
for(auto it : G[nod])
dfs(it, d + 1);
}
int main()
{
fin >> n >> nq;
for(int i = 1; i <= n; i++)
{
fin >> s[i][0];
G[s[i][0]].push_back(i);
}
dfs(0, 0);
for(int i = 1; i <= nq; i++)
{
int nod, nr, pow = 1;
fin >> nod >> nr;
for(int j = maxLg; j >= 0; j--)
if(nr & (1 << j))
nod = s[nod][j];
fout << nod << '\n';
}
return 0;
}