Pagini recente » Cod sursa (job #2486880) | Cod sursa (job #2835912) | Cod sursa (job #1669097) | Cod sursa (job #1723204) | Cod sursa (job #2520040)
#include <bits/stdc++.h>
#define Nmax 250005
using namespace std;
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
int h[Nmax], t[20][Nmax], n, q, x, y;
vector <int> v[Nmax];
void dfs(int x)
{
for(int k=1; (1<<k) < h[x]; k++)
t[k][x]=t[k-1][t[k-1][x]];
for(int i=0;i<v[x].size();i++)
if(h[v[x][i]]==0)
{
h[v[x][i]]=h[x]+1;
dfs(v[x][i]);
}
}
int ras(int x, int y)
{
if(y>=h[x])
return 0;
if(y==0)
return x;
int k;
for(k=0;(1<<(k+1))<=y;k++);
return ras(t[k][x], y-(1<<k));
}
int main()
{
fin >> n >> q;
for(int i=1;i<=n;i++)
{
fin >> t[0][i];
v[t[0][i]].push_back(i);
}
for(int i=1;i<=n;i++)
if(t[0][i]==0)
{
h[i]=1;
dfs(i);
}
for(int i=1;i<=q;i++)
{
fin >> x >> y;
fout << ras(x, y) << '\n';
}
return 0;
}