Pagini recente » Cod sursa (job #2810333) | Cod sursa (job #3231108) | Profil UVT_Butunoi_Cheroiu_Grama | Cod sursa (job #3293389) | Cod sursa (job #3294788)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int DIM = 250003;
const int maxN = 19;
int n, tt, ancestor[DIM][maxN];
inline void prelucru() {
for(int j=1; j<maxN; j++)
for(int i=1; i<=n; i++)
if(ancestor[i][j - 1] != 0) ancestor[i][j] = ancestor[ancestor[i][j - 1]][j - 1];
}
inline int findKthAncestor(int nod, int k) {
for(int i=maxN-1; i>=0; i--) {
if(k & (1 << i)) {
if(ancestor[nod][i] == 0) return 0;
nod = ancestor[nod][i];
}
}
return nod;
}
int main()
{
fin >> n >> tt;
for(int i=1; i<=n; i++) {
int tata; fin >> tata;
ancestor[i][0] = tata;
}
prelucru();
while(tt--) {
int nod, k; fin >> nod >> k;
fout << findKthAncestor(nod, k) << '\n';
}
return 0;
}