Pagini recente » Cod sursa (job #1988858) | Cod sursa (job #2513521) | Cod sursa (job #2666287) | Cod sursa (job #273799) | Cod sursa (job #3179771)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 250005
#define MAXLOG 19
int tata[NMAX], stramosi[MAXLOG][NMAX],n;
void __initDinamics__(){
for(int i = 1;i<=n;i++){
/// stramosul cu numarul 2^0 (1) este de fapt tatal nodului
stramosi[0][i] = tata[i];
}
for(int i = 1;i<MAXLOG;i++){
for(int j = 1;j<=n;j++){
stramosi[i][j] = stramosi[i-1][stramosi[i-1][j]];
}
}
}
int getStramos(int nod, int k){
/// determinarea celui de al k lea nod se reduce in scrierea in baza 2 a lui k
for(int i = 0;i< MAXLOG; i++){
if(k & (1 << i)){
nod = stramosi[i][nod];
}
}
return nod;
}
int main(void){
ofstream cout("stramosi.out");
ifstream cin("stramosi.in");
int T;
cin >> n >> T;
for(int i= 1;i<=n;i++){
int x;
cin >> x;
tata[i] = x;
}
__initDinamics__();
while(T--){
int nod, k;
cin >> nod >> k;
cout << getStramos(nod,k) << '\n';
}
}