Hướng dẫn giải của Sinh Vật Huyền Bí
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng tiếp cận
Bài toán yêu cầu chọn đúng đỉnh trên cây có trọng số cạnh để tối đa hóa tổng khoảng cách giữa tất cả các cặp đỉnh được chọn. Ta sử dụng kỹ thuật DP trên cây kết hợp bài toán ba lô (knapsack on tree).
Nhận xét quan trọng
Phân rã theo cạnh: Tổng khoảng cách giữa tất cả các cặp đỉnh được chọn có thể được phân rã theo từng cạnh. Với mỗi cạnh có trọng số , nếu ta chọn đỉnh ở phía cây con chứa và đỉnh ở phía còn lại, thì cạnh này đóng góp vào tổng khoảng cách (vì có đúng cặp đỉnh đi qua cạnh này).
Bài toán ba lô trên cây: Khi gộp các cây con, ta cần quyết định phân bổ bao nhiêu đỉnh được chọn vào mỗi cây con — đây chính là bài toán ba lô (knapsack) trên cây.
Độ phức tạp tối ưu: Nếu gộp cây con một cách cẩn thận (theo kích thước cây con đã xử lý), tổng thời gian là trong trường hợp xấu nhất, nhưng trên thực tế nhanh hơn nhờ ràng buộc kích thước cây con.
Thuật toán
Xây dựng cây từ danh sách cạnh. Chọn đỉnh 1 làm gốc.
DFS từ gốc. Với mỗi đỉnh , duy trì mảng = tổng đóng góp tối đa từ các cạnh trong cây con gốc , khi chọn đúng đỉnh trong cây con này.
Khởi tạo: Khi đỉnh chưa có cây con nào được gộp:
- (không chọn đỉnh nào)
- (chỉ chọn đỉnh , chưa có cạnh nào đóng góp)
- với
Gộp cây con (với cạnh trọng số ) vào :
- Duyệt tất cả các tổ hợp: đỉnh đã chọn từ phần đã xử lý của , và đỉnh chọn từ cây con .
- Giá trị mới:
- Lưu ý: là đóng góp của cạnh — có đỉnh bên cây con và đỉnh bên ngoài.
Kết quả: — giá trị tối đa khi chọn đúng đỉnh trên toàn bộ cây.
Độ phức tạp
- Thời gian: — tại mỗi cạnh, ta duyệt tối đa tổ hợp. Với , số phép tính tối đa khoảng trong trường hợp xấu nhất, nhưng trên thực tế nhanh hơn nhiều nhờ ràng buộc kích thước cây con (tổng tích kích thước khi gộp bị giới hạn bởi ).
- Bộ nhớ:
Bình luận