Pagini recente » Cod sursa (job #1175755) | Cod sursa (job #112825) | Cod sursa (job #2364112) | Cod sursa (job #1710033) | Cod sursa (job #3137235)
#include <fstream>
#include <vector>
#include <algorithm>
#define eb emplace_back
using namespace std;
using pii = pair<int,int>;
const int MAX = 25e4+1;
const int qmax = 3e5+1;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
int r , n , m , x , y , rez[qmax] , path[MAX] , k;
vector <int> g[MAX];
vector <pii> q[MAX];
vector <int> roots;
void dfs( int x ){
path[++k] = x;
for(auto it : q[x]){
if(it.first >= k){
rez[it.second] = 0;
}else rez[it.second] = path[k-it.first];
}
for(auto it : g[x]){
dfs(it);
}
k--;
}
signed main()
{
cin >> n >> m;
for(int i = 1 ; i <= n ; i++){
cin >> x;
if(!x) roots.eb(i);
else g[x].eb(i);
}
for(int i = 1 ; i <= m ; i++){
cin >> x >> y;
q[x].eb(make_pair(y,i));
}
for(auto it : roots){
dfs(it);
}
for(int i = 1 ; i <= m ; i++){
cout << rez[i] << '\n';
}
return 0;
}