yicongli

Gym 101848C

Jan 23rd, 2021
843
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define gc c=getchar()
  6. #define r(x) read(x)
  7. #define ll long long
  8.  
  9. template<typename T>
  10. inline void read(T&x){
  11.     x=0;T k=1;char gc;
  12.     while(!isdigit(c)){if(c=='-')k=-1;gc;}
  13.     while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
  14. }
  15.  
  16. const int N=1e6+7;
  17.  
  18. stack<int> sta[N];
  19. vector<int> G[N];
  20. vector<int> func[N];
  21. vector<pair<int,int> >query[N];
  22.  
  23. int ans[N];
  24.  
  25. void dfs(int x){
  26.     for(int i=0;i<func[x].size();++i){
  27.         sta[func[x][i]].push(x);
  28.     }
  29.     for(int i=0;i<query[x].size();++i){
  30.         ans[query[x][i].second]=sta[query[x][i].first].size()?sta[query[x][i].first].top():-1;
  31.     }
  32.     for(int i=0;i<G[x].size();++i){
  33.         dfs(G[x][i]);
  34.     }
  35.     for(int i=0;i<func[x].size();++i){
  36.         sta[func[x][i]].pop();
  37.     }
  38. }
  39.  
  40. int main(){
  41.     // freopen(".in","r",stdin);
  42.     // freopen(".out","w",stdout);
  43.     int n;r(n);
  44.     for(int i=2;i<=n;++i){
  45.         int f;r(f);
  46.         G[f].push_back(i);
  47.     }
  48.     for(int i=1;i<=n;++i){
  49.         int x;r(x);
  50.         while(x--){
  51.             int t;r(t);
  52.             func[i].push_back(t);
  53.         }
  54.     }
  55.     int q;r(q);
  56.     for(int i=1;i<=q;++i){
  57.         int x,y;r(x),r(y);
  58.         query[x].push_back(make_pair(y,i));
  59.     }
  60.     dfs(1);
  61.     for(int i=1;i<=q;++i){
  62.         printf("%d\n",ans[i]);
  63.     }
  64.     return 0;
  65. }
RAW Paste Data