Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define gc c=getchar()
- #define r(x) read(x)
- #define ll long long
- template<typename T>
- inline void read(T&x){
- x=0;T k=1;char gc;
- while(!isdigit(c)){if(c=='-')k=-1;gc;}
- while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
- }
- const int N=1e6+7;
- stack<int> sta[N];
- vector<int> G[N];
- vector<int> func[N];
- vector<pair<int,int> >query[N];
- int ans[N];
- void dfs(int x){
- for(int i=0;i<func[x].size();++i){
- sta[func[x][i]].push(x);
- }
- for(int i=0;i<query[x].size();++i){
- ans[query[x][i].second]=sta[query[x][i].first].size()?sta[query[x][i].first].top():-1;
- }
- for(int i=0;i<G[x].size();++i){
- dfs(G[x][i]);
- }
- for(int i=0;i<func[x].size();++i){
- sta[func[x][i]].pop();
- }
- }
- int main(){
- // freopen(".in","r",stdin);
- // freopen(".out","w",stdout);
- int n;r(n);
- for(int i=2;i<=n;++i){
- int f;r(f);
- G[f].push_back(i);
- }
- for(int i=1;i<=n;++i){
- int x;r(x);
- while(x--){
- int t;r(t);
- func[i].push_back(t);
- }
- }
- int q;r(q);
- for(int i=1;i<=q;++i){
- int x,y;r(x),r(y);
- query[x].push_back(make_pair(y,i));
- }
- dfs(1);
- for(int i=1;i<=q;++i){
- printf("%d\n",ans[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement