Có một cây gốc gồm n đỉnh, đánh số từ 1 đến n, với gốc là đỉnh 1. Với mỗi đỉnh v từ 2 đến n, cha trực tiếp của nó là pv.
Độ sâu của một đỉnh là số cạnh trên đường từ gốc 1 đến đỉnh đó; do đó gốc có độ sâu 0.
Mỗi truy vấn cho hai số u,d. Hãy đếm số đỉnh x thỏa đồng thời:
x thuộc cây con gốc u, kể cả trường hợp x=u;
độ sâu tuyệt đối của x bằng đúng d.
Lưu ý d là độ sâu tính từ gốc 1, không phải khoảng cách từ u.
Input
Dòng đầu chứa số nguyên n.
Dòng tiếp theo chứa n−1 số p2,p3,…,pn.
Dòng tiếp theo chứa số nguyên q.
Mỗi dòng trong q dòng cuối chứa hai số nguyên u,d.
Output
In q dòng; dòng thứ i là số đỉnh thỏa truy vấn thứ i.
Constraints
2≤n≤2⋅105.
1≤pv<v với mọi 2≤v≤n.
1≤q≤2⋅105.
1≤u≤n.
0≤d≤n−1.
Scoring
Subtask 1 (50% số điểm): n,q≤3000.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
9
1 1 2 2 3 3 6 6
6
1 2
2 2
3 3
6 2
6 1
8 3
Output
4
2
2
1
0
1
Giải thích: Ở độ sâu 2, cây con của gốc có các đỉnh 4,5,6,7, còn cây con của 2 chỉ có 4,5. Đỉnh 6 tự thuộc cây con của nó và có độ sâu 2, nhưng không thể có hậu duệ ở độ sâu 1.
Lời giải tóm tắt
Nhận xét: Trong preorder Euler, cây con u là đoạn thời gian vào [tin[u],tout[u]]. Nếu gom các đỉnh theo độ sâu, danh sách tin của từng độ sâu tự tăng dần theo thứ tự DFS. Một truy vấn vì thế là đếm số phần tử của danh sách độ sâu d nằm trong đoạn cây con.
Thuật toán: DFS lặp để tính tin,tout,depth; khi vào đỉnh v, thêm tin[v] vào atDepth[depth[v]]. Với truy vấn (u,d), dùng lower_bound(tin[u]) và upper_bound(tout[u]) trên atDepth[d]; hiệu hai vị trí là đáp án.
Chứng minh tính đúng đắn: Mỗi đỉnh có độ sâu d xuất hiện đúng một lần trong danh sách tương ứng. Theo tính chất đoạn cây con, đỉnh đó là hậu duệ của u đúng khi tin nằm trong [tin[u],tout[u]]; hai phép tìm cận đếm chính xác toàn bộ giao này và không đếm đỉnh ngoài cây con.
Độ phức tạp: Tiền xử lý O(n), mỗi truy vấn O(log n), bộ nhớ O(n).