canuc80k3500·1/50

Tổ Tiên Cách K Bậc

Nộp bài trên LQDOJ

Bài 35 · Binary Lifting

Cho một cây có gốc tại đỉnh . Với mỗi truy vấn gồm đỉnh và số nguyên , hãy tìm tổ tiên của cách đúng cạnh; nếu đường đi đã vượt quá gốc thì in .

Input

  • Dòng đầu chứa hai số nguyên và .
  • Dòng thứ hai chứa số ; là cha trực tiếp của đỉnh .
  • dòng tiếp theo, mỗi dòng chứa và .

Output

  • Với mỗi truy vấn, in số hiệu tổ tiên cách đúng cạnh; in nếu tổ tiên đó không tồn tại.

Constraints

  • .
  • với mọi .
  • và .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( 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 về gốc là . Ba truy vấn đầu lần lượt dừng ở ; truy vấn cuối đi cao hơn gốc nên nhận .

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.