Lưu ý: Đề bài trên VOJ bị thiếu, kết quả xuất ra của bài này là
chỉ số những cạnh được giữ lại, nếu có nhiều cách thì in ra cách
bất kì.
Đầu tiên ta tìm số cạnh loại 1 nhiều nhất có thể giữ lại bằng cách
thêm tất cả các cạnh loại 1 vào cây khung, số cạnh được thêm vào chính
là số cạnh lớn nhất cần tìm. Tương tự ta cũng tìm số cạnh loại 2 nhiều
nhất có thể thêm vào, rồi lấy \(n-1\) trừ cho số cạnh nhiều nhất loại 2
để tìm số cạnh loại 1 tối thiểu cần thêm vào.
Sau bước trên ta có được \(min_1\) và \(max_1\) tương ứng là số cạnh loại 1
tối thiểu và tối đa trong cây khung. Tiếp theo cho \(k\) chạy từ \(min_1\)
đến \(max_1\) để tìm phương án thuê có chi phí thấp nhất.
Giả sử phương án thuê tìm được có \(x\) cạnh loại 1 (và \(n-1-x\) cạnh loại 2),
ta tìm các cạnh được giữ lại như sau:
- Bước 1, thêm tất cả các cạnh loại 2 vào cây khung, sau đó tiếp tục thêm các
cạnh loại 1. Các cạnh loại 1 được thêm trong bước này cũng là các cạnh sẽ được
giữ lại.
- Bước 2, xây dựng một cây khung khác bằng cách thêm tất cả các cạnh loại 1 được
thêm trong bước 1, sau đó tiếp tục thêm các cạnh loại 1 khác cho đến khi đủ \(x\)
cạnh.
- Bước cuối cùng là thêm các cạnh loại 2 vào cho đủ cây khung.