Cây trắng - đen
Xem dạng PDFBlack and White Tree
Problem
Bạn được cho một cây có gốc gồm ~N~ đỉnh (đánh số ~1..N~), gốc là đỉnh ~1~. Mỗi đỉnh có một màu đen hoặc trắng. Ban đầu tất cả các đỉnh đều trắng.
Chef ghi lại một dãy gồm ~M~ đỉnh ~V_1, V_2, \dots, V_M~. Với mỗi thao tác thứ ~i~ (ứng với ~V_i~), thực hiện:
- Chọn đỉnh ~V_i~.
- Nếu ~V_i~ đang đen, tô trắng nó.
- Tìm đỉnh trắng xa nhất so với ~V_i~ theo khoảng cách trên cây (tổng số cạnh trên đường đi đơn). Nếu có nhiều đỉnh xa nhất, chọn đỉnh có chỉ số lớn nhất. Đỉnh này là kết quả của thao tác.
- Nếu ở bước 2 không tô lại ~V_i~ (tức ~V_i~ ban đầu trắng), thì sau bước 3 tô đen ~V_i~.
Yêu cầu: với mỗi thao tác, in ra chỉ số của đỉnh kết quả tìm được ở bước 3.
Input
- Dòng đầu chứa số nguyên ~T~ — số bộ test.
Với mỗi bộ test:
- Dòng đầu chứa hai số nguyên ~N, M~ — số đỉnh của cây và số thao tác.
- Dòng thứ hai chứa ~N-1~ số nguyên ~P_2, P_3, \dots, P_N~ với ~P_i~ là cha của đỉnh ~i~ trong cây (đảm bảo đồ thị là cây gốc tại ~1~).
- Tiếp theo ~M~ dòng, dòng thứ ~i~ chứa một số nguyên ~V_i~ — đỉnh được chọn ở thao tác thứ ~i~.
Output
- Đối với mỗi thao tác của mỗi bộ test, in một dòng là chỉ số của đỉnh trắng xa nhất tìm được ở bước 3.
Constraints
- ~1 \le T \le 1000~
- ~2 \le N \le 2\cdot10^5~
- ~1 \le M \le 2\cdot10^5~
- ~1 \le P_i, V_i \le N~
- Tổng ~N~ qua tất cả test ~\le 2\cdot10^5~
- Tổng ~M~ qua tất cả test ~\le 2\cdot10^5~
Notes
- Khoảng cách giữa hai đỉnh là số cạnh trên đường đi duy nhất nối chúng.
- Ở bước 3, đỉnh ~V_i~ được xét theo màu sau bước 2 (tức có thể vừa được tô trắng nếu trước đó đen).
Sample Input
2
6 7
3 1 3 4 4
1
5
6
1
3
5
2
2 2
1
2
1
Sample Output
6
2
2
4
4
2
5
1
1
Bình luận
Gửi bài giải
Kotlin
PyPy
Điểm:
10,00 (OI)
Giới hạn thời gian: 2.0s
Giới hạn bộ nhớ:
98M
Input:
stdin
Output:
stdout
Dạng bài
CENTROID
Ngôn ngữ cho phép
C
C++
Java
Pascal
Python
Scratch