Đường kính của cây
Đề bài
Mô tả
Đây là bài toán tương tác.
Hệ thống giữ bí mật một cây có trọng số gồm đỉnh được đánh số từ đến và cạnh. Mỗi cạnh có trọng số là một số nguyên dương không vượt quá . Khoảng cách giữa hai đỉnh là tổng trọng số các cạnh trên đường đi duy nhất nối chúng.
Nhiệm vụ của bạn là tìm đường kính của cây — tức khoảng cách lớn nhất giữa một cặp đỉnh bất kỳ.
Bạn không được cho biết cây, nhưng có thể đặt câu hỏi. Mỗi câu hỏi gồm hai tập đỉnh khác rỗng và rời nhau và ; hệ thống trả về khoảng cách lớn nhất giữa một đỉnh thuộc và một đỉnh thuộc , tức . Bạn được hỏi không quá câu hỏi cho mỗi cây.
Dữ liệu vào
Đầu tiên hệ thống in ra một dòng chứa số nguyên — số lượng bộ dữ liệu. Sau đó là bộ dữ liệu. Với mỗi bộ, hệ thống in ra một dòng chứa số nguyên — số đỉnh của cây hiện tại.
Giao thức tương tác
Với mỗi cây, sau khi đọc bạn thực hiện:
- Để hỏi, in ra một dòng
k_1 k_2 a_1 a_2 ... a_{k_1} b_1 b_2 ... b_{k_2}, trong đó và . Đây là tập và tập ; hai tập phải rời nhau. Hệ thống trả lời bằng một số nguyên là khoảng cách lớn nhất giữa hai tập. - Khi đã biết đáp án, in ra một dòng
-1 d, trong đó là đường kính của cây, rồi chuyển sang cây tiếp theo (hoặc kết thúc nếu đây là cây cuối). Dòng này không tính là một câu hỏi.
Nếu bạn hỏi quá câu hỏi cho một cây, đặt câu hỏi không hợp lệ, hoặc đưa ra đáp án sai, bạn sẽ nhận kết quả sai.
Quan trọng: Sau mỗi lần in ra, bạn phải flush output:
- C++:
cout << endl;hoặccout.flush(); - Python:
print(..., flush=True)
Ràng buộc
- Trọng số mỗi cạnh là số nguyên trong đoạn .
Ví dụ
| Chương trình | Hệ thống | Giải thích |
|---|---|---|
| 2 | Có bộ dữ liệu. | |
| 5 | Cây thứ nhất có đỉnh (các cạnh: trọng số , trọng số , trọng số , trọng số ). | |
| 2 3 2 4 1 3 5 | 9 | , ; khoảng cách lớn nhất là . |
| 2 3 2 3 1 4 5 | 10 | , ; lớn nhất là . |
| -1 10 | Báo đường kính cây thứ nhất là . | |
| 2 | Cây thứ hai có đỉnh (cạnh trọng số ). | |
| 1 1 1 2 | 99 | , ; khoảng cách là . |
| -1 99 | Báo đường kính cây thứ hai là . |
Bình luận