Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- vector <vector<int> > graph (200000 + 1);
- vector <int> color;
- vector <int> por;
- vector <int> s;
- int k = 0;
- void dfs (int v,int par) {
- color[v] = par;
- for ( int i = 0; i < graph[v].size(); ++i) {
- int u = graph[v][i];
- if (color[u] != color[v]) {
- por.push_back(u);
- ++ s[v];
- dfs(u,par);
- s[v] += s[u];
- }
- }
- }
- int main () {
- int n,q;
- cin >> n >> q;
- color.resize(n + 1,0);
- s.resize(n + 1,0);
- for ( int i = 2; i <= n; ++i) {
- int p;
- cin >> p;
- graph[p].push_back(i);
- }
- for ( int i = 1; i <= n; ++i ){
- sort(graph[i].begin(),graph[i].end());
- }
- vector <int> u(q);
- vector <int> k(q);
- vector <int> ans(q,-1);
- por.push_back(1);
- dfs(1,1);
- for ( int i = 0 ; i < q; ++i) {
- cin >> u[i] >> k[i];
- }
- for ( int i = 0; i < q; ++i) {
- for ( int j = 0; j < por.size(); ++j) {
- if (u[i] == por[j]) {
- if (s[u[i]] + 1< k[i]) {
- cout << "-1" << endl;
- }
- else {
- cout << por[j + k[i] - 1] << endl;
- }
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement