Pagini recente » Cod sursa (job #2168216) | Cod sursa (job #1362144) | Cod sursa (job #2734084) | Cod sursa (job #3123950) | Cod sursa (job #2972476)
#include <bits/stdc++.h>
#define N 250008
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, q;
int Dad[N];
int first;
vector<int> g[N];
void Citire()
{
int i;
fin >> n >> q;
for( i=1; i<=n; i++ )
{
fin >> Dad[i];
if( Dad[i] != 0 )
g[ Dad[i] ].push_back(i);
}
}
int Up[N][26];
void DFS( int x )
{
for( auto y : g[x] )
{
Up[y][0] = x;
for( int j=1; (1<<j) <= n; j++ )
Up[y][j] = Up[ Up[y][j - 1] ][j - 1];
DFS(y);
}
}
void Rezolvare()
{
int i;
int x, k;
for( i=1; i<=n; i++ )
if( Dad[i] == 0 ) DFS(i);
while( q-- )
{
fin >> x >> k;
for( i = 26; i >= 0; --i )
if( (1<<i) & k )
x = Up[x][i];
fout << x << "\n";
}
}
int main()
{
Citire();
Rezolvare();
return 0;
}