Cho một cây có gốc tại đỉnh 1. Với mỗi truy vấn gồm đỉnh x và số nguyên k, hãy tìm tổ tiên của x cách đúng k cạnh; nếu đường đi đã vượt quá gốc thì in −1.
Input
Dòng đầu chứa hai số nguyên n và q.
Dòng thứ hai chứa n−1 số p2,p3,…,pn; pi là cha trực tiếp của đỉnh i.
q dòng tiếp theo, mỗi dòng chứa x và k.
Output
Với mỗi truy vấn, in số hiệu tổ tiên cách x đúng k cạnh; in −1 nếu tổ tiên đó không tồn tại.
Constraints
1≤n,q≤2⋅105.
1≤pi≤i−1 với mọi 2≤i≤n.
1≤x≤n và 1≤k≤n.
Scoring
Subtask 1 (50% số điểm): n,q≤2000.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
7 4
1 1 2 2 4 4
7 1
7 2
7 3
7 4
Output
4
2
1
-1
Giải thích: Đường từ đỉnh 7 về gốc là 7→4→2→1. Ba truy vấn đầu lần lượt dừng ở 4,2,1; truy vấn cuối đi cao hơn gốc nên nhận −1.
Lời giải tóm tắt
Ý tưởng: Xem một bước chuyển của bài toán như một hàm xác định trên tập trạng thái. Bảng jump[b][x] lưu trạng thái đạt được từ x sau đúng 2^b bước. Mức đầu tiên mô tả một bước; mỗi mức sau ghép hai đoạn liên tiếp có cùng độ dài.
Ý tưởng: Khi cần thực hiện một số bước, ta phân tích số đó theo nhị phân. Với mỗi bit đang bật, cập nhật trạng thái bằng cột tương ứng của bảng. Cách ghép này đặc biệt phải giữ đúng quy ước đếm bước của đề.
Chứng minh đúng:Bổ đề 1. Với mọi trạng thái x, jump[0][x] là trạng thái sau đúng một bước theo định nghĩa bài toán.
Chứng minh đúng:Bổ đề 2. Với mọi b ≥ 0, jump[b][x] là trạng thái sau đúng 2^b bước. Bổ đề đúng ở b=0; nếu đúng ở b-1, đi 2^(b-1) bước tới trạng thái trung gian rồi đi thêm 2^(b-1) bước chính là 2^b bước.
Chứng minh đúng:Định lý. Thuật toán in đúng kết quả. Các lũy thừa hai ứng với bit bật tạo thành một phân hoạch của đúng số bước cần thực hiện; theo Bổ đề 2, mỗi khối được thực hiện chính xác và trạng thái sau khối trước là đầu vào của khối sau.
Độ phức tạp: Tiền xử lý dùng O(S log B) thời gian và bộ nhớ, với S là số trạng thái và B là cận số bước. Mỗi điểm bắt đầu hoặc truy vấn được xử lý trong O(log B).
Lưu ý cài đặt: Cần kiểm tra riêng quy ước ở trường hợp tổ tiên đúng tại gốc và bảo đảm số mức đủ cho nhiều truy vấn trên cây phân nhánh.