Advertisement
Guest User

Untitled

a guest
Jul 18th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. vector <vector<int> > graph (200000 + 1);
  5. vector <int> color;
  6. vector <int> por;
  7. vector <int> s;
  8. int k = 0;
  9. void dfs (int v,int par) {
  10. color[v] = par;
  11. for ( int i = 0; i < graph[v].size(); ++i) {
  12. int u = graph[v][i];
  13. if (color[u] != color[v]) {
  14. por.push_back(u);
  15. ++ s[v];
  16. dfs(u,par);
  17. s[v] += s[u];
  18. }
  19.  
  20. }
  21.  
  22. }
  23.  
  24.  
  25. int main () {
  26. int n,q;
  27. cin >> n >> q;
  28. color.resize(n + 1,0);
  29. s.resize(n + 1,0);
  30. for ( int i = 2; i <= n; ++i) {
  31. int p;
  32. cin >> p;
  33. graph[p].push_back(i);
  34. }
  35. for ( int i = 1; i <= n; ++i ){
  36. sort(graph[i].begin(),graph[i].end());
  37. }
  38. vector <int> u(q);
  39. vector <int> k(q);
  40. vector <int> ans(q,-1);
  41. por.push_back(1);
  42. dfs(1,1);
  43. for ( int i = 0 ; i < q; ++i) {
  44. cin >> u[i] >> k[i];
  45. }
  46. for ( int i = 0; i < q; ++i) {
  47. for ( int j = 0; j < por.size(); ++j) {
  48. if (u[i] == por[j]) {
  49. if (s[u[i]] + 1< k[i]) {
  50. cout << "-1" << endl;
  51. }
  52. else {
  53. cout << por[j + k[i] - 1] << endl;
  54. }
  55. }
  56. }
  57. }
  58.  
  59.  
  60. return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement