#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e5 + 5;
int n, q;
vector<int> adj[N];
int tin[N], tout[N], timer;
int depth[N]; // depth[u] = Độ sâu của đỉnh u
void dfs(int u, int p) {
tin[u] = ++timer;
for (int v : adj[u]) {
if (v == p) continue;
depth[v] = depth[u] + 1;
dfs(v, u);
}
tout[u] = timer;
}
// - Bài toán: Đếm số lượng đỉnh v có trong cây con gốc u sao cho depth[v] = d
// - Cây con gốc u sẽ tương ứng với đoạn [tin(u), tout(u)] trên Euler Tour
// => Biến đổi thành bài toán đếm số lượng phần tử trong đoạn có giá trị = d
// => Bài toán kinh điển của tìm kiếm nhị phân
// Ngoài ra cũng có cách xử lí offline bằng Fenwick Tree / Segment Tree: trả lời các truy vấn theo độ cao
vector<int> pos[N]; // pos[d] = Danh sách vị trí (tin[u]) của các đỉnh ở độ sâu d theo thứ tự tăng dần
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int u = 2; u <= n; u++) {
int p; cin >> p;
adj[p].push_back(u);
adj[u].push_back(p);
}
timer = 0;
depth[1] = 0;
dfs(1, -1);
for (int u = 1; u <= n; u++) {
pos[depth[u]].push_back(tin[u]);
}
for (int d = 0; d <= n - 1; d++) {
sort(pos[d].begin(), pos[d].end());
}
cin >> q;
while (q--) {
int u, d;
cin >> u >> d;
int ans = upper_bound(pos[d].begin(), pos[d].end(), tout[u]) -
lower_bound(pos[d].begin(), pos[d].end(), tin[u]);
cout << ans << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAyZTUgKyA1OyAKCmludCBuLCBxOyAgCnZlY3RvcjxpbnQ+IGFkaltOXTsgCgppbnQgdGluW05dLCB0b3V0W05dLCB0aW1lcjsgICAKaW50IGRlcHRoW05dOyAvLyBkZXB0aFt1XSA9IMSQ4buZIHPDonUgY+G7p2EgxJHhu4luaCB1Cgp2b2lkIGRmcyhpbnQgdSwgaW50IHApIHsKCXRpblt1XSA9ICsrdGltZXI7ICAKCWZvciAoaW50IHYgOiBhZGpbdV0pIHsKCQlpZiAodiA9PSBwKSBjb250aW51ZTsgIAoJCWRlcHRoW3ZdID0gZGVwdGhbdV0gKyAxOyAKCQlkZnModiwgdSk7IAoJfQoJdG91dFt1XSA9IHRpbWVyOyAKfQoKLy8gLSBCw6BpIHRvw6FuOiDEkOG6v20gc+G7kSBsxrDhu6NuZyDEkeG7iW5oIHYgY8OzIHRyb25nIGPDonkgY29uIGfhu5FjIHUgc2FvIGNobyBkZXB0aFt2XSA9IGQKLy8gLSBDw6J5IGNvbiBn4buRYyB1IHPhur0gdMawxqFuZyDhu6luZyB24bubaSDEkW/huqFuIFt0aW4odSksIHRvdXQodSldIHRyw6puIEV1bGVyIFRvdXIKLy8gPT4gQmnhur9uIMSR4buVaSB0aMOgbmggYsOgaSB0b8OhbiDEkeG6v20gc+G7kSBsxrDhu6NuZyBwaOG6p24gdOG7rSB0cm9uZyDEkW/huqFuIGPDsyBnacOhIHRy4buLID0gZAovLyA9PiBCw6BpIHRvw6FuIGtpbmggxJFp4buDbiBj4bunYSB0w6xtIGtp4bq/bSBuaOG7iyBwaMOibgovLyAgICBOZ2/DoGkgcmEgY8WpbmcgY8OzIGPDoWNoIHjhu60gbMOtIG9mZmxpbmUgYuG6sW5nIEZlbndpY2sgVHJlZSAvIFNlZ21lbnQgVHJlZTogdHLhuqMgbOG7nWkgY8OhYyB0cnV5IHbhuqVuIHRoZW8gxJHhu5kgY2FvCgp2ZWN0b3I8aW50PiBwb3NbTl07IC8vIHBvc1tkXSA9IERhbmggc8OhY2ggduG7iyB0csOtICh0aW5bdV0pIGPhu6dhIGPDoWMgxJHhu4luaCDhu58gxJHhu5kgc8OidSBkIHRoZW8gdGjhu6kgdOG7sSB0xINuZyBk4bqnbgoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IG47IAoJZm9yIChpbnQgdSA9IDI7IHUgPD0gbjsgdSsrKSB7CgkJaW50IHA7IGNpbiA+PiBwOyAgCgkJYWRqW3BdLnB1c2hfYmFjayh1KTsgCgkJYWRqW3VdLnB1c2hfYmFjayhwKTsgCgl9CgoJdGltZXIgPSAwOyAgIAoJZGVwdGhbMV0gPSAwOyAgCglkZnMoMSwgLTEpOyAgCgoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSB7CgkJcG9zW2RlcHRoW3VdXS5wdXNoX2JhY2sodGluW3VdKTsgCgl9Cglmb3IgKGludCBkID0gMDsgZCA8PSBuIC0gMTsgZCsrKSB7CgkJc29ydChwb3NbZF0uYmVnaW4oKSwgcG9zW2RdLmVuZCgpKTsgCgl9CgoJY2luID4+IHE7IAoJd2hpbGUgKHEtLSkgewoJCWludCB1LCBkOyAKCQljaW4gPj4gdSA+PiBkOyAgCgkJaW50IGFucyA9IHVwcGVyX2JvdW5kKHBvc1tkXS5iZWdpbigpLCBwb3NbZF0uZW5kKCksIHRvdXRbdV0pIC0gCgkJCQkgIGxvd2VyX2JvdW5kKHBvc1tkXS5iZWdpbigpLCBwb3NbZF0uZW5kKCksIHRpblt1XSk7IAoJCWNvdXQgPDwgYW5zIDw8ICdcbic7IAoJfQp9