#include #define chmin(x,y) (x) = min((x),(y)) #define chmax(x,y) (x) = max((x),(y)) using namespace std; using ll = long long; const ll mod = 998244353; const vector dx = {1,0,-1,0}, dy = {0,1,0,-1}; using Graph = vector>; int main(){ // input int N; cin >> N; Graph G(N); vector L(N),A(N); for (int i = 1; i < N; i++){ cin >> L[i] >> A[i]; A[i]--; // manage skills ID by 0-indexed G[A[i]].push_back(i); } // prep: dijkstra vector v,lv(N,2e9); priority_queue> pq; pq.emplace(0,0); lv[0] = 0; while(!pq.empty()){ int cur_l = pq.top().first, cur_s = pq.top().second; pq.pop(); for(auto nxt : G[cur_s]){ int nec_l = max(L[nxt],-cur_l); if(lv[nxt] > nec_l){ lv[nxt] = nec_l; pq.emplace(-nec_l,nxt); } } } for(int i = 0; i < N; i++) if(lv[i] < 2e9) v.push_back(lv[i]); sort(v.begin(),v.end()); // solve + output int Q; cin >> Q; while(Q--){ int q,x; cin >> q >> x; if(q == 1) cout << upper_bound(v.begin(),v.end(),x) - v.begin() << endl; else cout << (lv[x-1] < 2e9? lv[x-1] : -1) << endl; } }