Pagini recente » Cod sursa (job #292478) | Cod sursa (job #573701) | Cod sursa (job #545190) | Cod sursa (job #961974) | Cod sursa (job #3240995)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 25e4+2;
const int QMAX = 3e5+2;
using pii = pair<int, int>;
int n,q,p[NMAX],ans[QMAX],st[NMAX];
vector<int> v[NMAX];
vector<pii> queries[NMAX];
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
void dfs(int nod, int tata = 0, int niv = 1){
st[niv] = nod;
for(auto [k, idx]: queries[nod]){
ans[idx] = st[niv - k];
}
for(int fiu: v[nod]){
if(fiu != tata){
dfs(fiu, nod, niv + 1);
}
}
}
int main()
{
fin >> n >> q;
for(int i = 1; i <= n; i++){
fin >> p[i];
v[i].push_back(p[i]);
v[p[i]].push_back(i);
}
for(int i = 1; i <= q; i++){
int x, k;
fin >> x >> k;
queries[x].push_back({k, i});
}
for(int i = 1; i <= n; i++){
if(p[i] == 0){
dfs(i);
}
}
for(int i = 1; i <= q; i++){
fout << ans[i] << "\n";
}
return 0;
}