Review in round 1 Câu C
Tóm tắt đề bài: Cho đồ thị vô hướng (cây) . Tìm đường đi (mỗi đỉnh đi qua đúng một lần) có tích số nhỏ nhất, với tích số của đường đi được tính bằng tích trọng số các nút của đường đi chia số nút trên đường đi.
Ta sẽ tạm gọi các đỉnh có trọng số là đỉnh
, và các đỉnh có trọng số lớn hơn
là đỉnh
.
Ta nhận thấy rằng đường đi tối ưu nhất chỉ chứa tối đa
đỉnh
.
Nếu không có đỉnh
, đường đi có tích số nhỏ nhất cần tìm chỉ có một đỉnh
với giá trị trọng số nhỏ nhất.
Ngược lại, đường đi cần tìm thuộc vào một trong hai dạng theo thứ tự duyệt:
Dạng
: Đường đi bao gồm
đỉnh
, tích số
.
Dạng
: Đường đi bao gồm
đỉnh
, một đỉnh
và
đỉnh
, tích số
Ta dễ dàng suy ra rằng để tìm được phương án tối ưu, ta cần đi qua càng nhiều đỉnh càng tốt.
Xét ví dụ sau như hình vẽ :

Với dạng thứ nhất, ta chỉ đi qua các đỉnh , vì vậy ta có thể biến đổi
bằng cách tạm thời xóa đi những cạnh nối
hoặc
.
Ta có hình vẽ
.
Do có đúng
cạnh nên
bị chia thành các thành phần liên thông (cây con), với ví dụ trên ta sẽ tạm gọi các thành phần
liên thông (cây con) chỉ chứa đỉnh
là: cây
, cây
và cây
(tương ứng với số đỉnh).
Lúc này, đường đi chỉ có thể thuộc một trong các cây con. Với mỗi cây con, số đỉnh nhiều nhất có thể đi qua chính là đường kính
của cây đó (Các bạn có thể tham khảo định nghĩa, tính chất và thuật toán tìm đường kính tại đây).
Ta dễ dàng có được bằng độ dài đường kính lớn nhất trong số các cây con. Trong ví dụ trên,
là đường kính của cây
.
Sau khi có được thuật toán cho dạng thứ nhất, ta có thể đưa ra được ý tưởng cho dạng đường đi thứ hai:
Kết nối hai cây con thông qua một "khớp nối" là đỉnh .
Mỗi đỉnh là "khớp nối" nếu có cạnh nối với
đỉnh
(
). Vì
có số cạnh
nên đỉnh
kết nối
cây con. Đường đi dạng thứ hai bao gồm đỉnh
và hai nhánh thuộc hai trong số
cây con.
Trong ví dụ trên, đường đi dạng thứ hai tối ưu nhất có tích số , trong đó có hai đỉnh
thuộc cây con
và ba đỉnh
thuộc cây con
.
Vậy tóm lại, ta cần làm như sau:
Tìm các cây con chỉ chứa đỉnh
.
Tìm đường kính lớn nhất trong số các cây con để tối ưu đường đi dạng thứ nhất.
Duyệt qua với mỗi đỉnh
, tìm hai nhánh có độ dài lớn nhất để tối ưu đường đi dạng thứ hai.
Kết quả là giá trị tích số nhỏ nhất trong hai dạng đường đi.
Độ phức tạp: . Code tham khảo
Comments