Liên bang hóa Berland
Đề bài
Mô tả
Cho một cây gồm đỉnh, các đỉnh được đánh số từ đến . Cây có cạnh được đánh số từ đến theo thứ tự xuất hiện trong dữ liệu vào.
Bạn cần chia tập đỉnh thành một số nhóm sao cho:
- Mỗi nhóm là một thành phần liên thông trong cây (tức là sau khi bỏ một số cạnh, các đỉnh thuộc cùng một nhóm vẫn liên thông với nhau qua các cạnh còn lại).
- Tồn tại đúng một nhóm có chính xác đỉnh.
- Số cạnh bị bỏ là nhỏ nhất có thể.
Hãy in ra số cạnh bị bỏ tối thiểu và một danh sách chỉ số các cạnh bị bỏ thoả mãn yêu cầu trên. Nếu có nhiều cách bỏ cạnh khác nhau cùng đạt số lượng tối thiểu, in ra một cách bất kỳ.
Dữ liệu vào
- Dòng đầu tiên chứa hai số nguyên và ().
- dòng tiếp theo, mỗi dòng chứa hai số nguyên (; ) — mô tả cạnh thứ nối hai đỉnh và .
Dữ liệu đảm bảo các cạnh tạo thành một cây.
Dữ liệu ra
- Dòng đầu in ra số nguyên — số cạnh tối thiểu cần bỏ.
- Dòng thứ hai in ra số nguyên — chỉ số các cạnh bị bỏ (theo thứ tự xuất hiện trong dữ liệu vào).
Nếu , bạn có thể để trống dòng thứ hai hoặc bỏ luôn dòng thứ hai.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 5 2 1 2 2 3 3 4 4 5 |
1 2 |
Bỏ cạnh số (nối và ). Nhóm có đúng đỉnh. |
| 5 3 1 2 1 3 1 4 1 5 |
2 3 4 |
Bỏ cạnh (nối và ) và cạnh (nối và ). Nhóm có đúng đỉnh; các đỉnh tách thành hai nhóm đơn lẻ. |
| 1 1 | 0 | Cây chỉ có một đỉnh, đã thoả mãn ngay từ đầu, không cần bỏ cạnh nào. |
Bình luận