Subtask 2
Vì nên trọng số các cạnh ban đầu bằng
do đó ta chỉ cần quan tâm các cạnh thêm vào có trọng số bằng là được.
Subtask 3,4
Ta xây đồ thị phía. Bên trái là đỉnh đã cho. Bên phải là đỉnh giả. Thêm cạnh nối giữa đỉnh bên trái và đỉnh bên phải với trọng số nếu chia hết cho .
Nhận xét: Đường đi ngắn nhất của đồ thị gốc bằng đường đi ngắn nhất của đồ thị mới
Chứng minh:
Đặt là ước chung của và . Kí hiệu là một cạnh nối giữa đỉnh bên trái và đỉnh bên phải với trọng số .
Trong đồ thị phía, cạnh và đều tồn tại, do đó tồn tại đường đi từ tới có tổng trọng số là với là ước chung bất kì. Trong tất cả các giá trị có thể của , dễ dàng thấy rằng là tạo ra trọng số nhỏ nhất.
Do đó, cách đi từ tới mà chỉ sử dụng các đỉnh giả trung gian trong đồ thị mới có trọng số không nhỏ hơn . Vì vậy nếu trong đường đi ngắn nhất của đồ thị mới có đoạn đi từ tới chỉ qua các đỉnh giả trung gian thì chắc chắn tổng trọng số của quãng này là , hay chính là tương ứng với việc đi trực tiếp từ đỉnh tới đỉnh trong đồ thị gốc.
-> dpcm
Mỗi đỉnh bên trái có [số ước của ] cạnh nối sang phải. Các đỉnh có cùng trọng số thì chập vào làm một (do độ dài đường đi ngắn nhất là bằng nhau).
Đặt . Khi đó tổng số cạnh nối là:
số ước của + số ước của + … + số ước của = .
Subtask 5
Ở subtask trước, ta chập các đỉnh chung trọng số vào làm để thu được đồ thị có cạnh.
Ở subtask này, ta chỉ chập các đỉnh có chung trọng số nếu như chúng không phải đầu mút của cạnh nào trong cạnh được thêm vào.
Nếu như có đỉnh là đầu mút của cạnh nào đó trong cạnh thêm vào, đồng thời cũng có đỉnh bất kì nào đó có cùng trọng số với , ta sẽ xây thêm [số ước của ] cạnh nữa nối từ đỉnh (bên trái) tới các đỉnh ước của nó ở bên phải và xây các cạnh nhận làm đầu mút trong cạnh được thêm với cách đỉnh tương ứng bên trái (như vậy đồ thị không còn là đồ thị phía nữa nhưng vẫn bảo đảm được tính chất của đường đi ngắn nhất)
Khi đó, số cạnh được thêm vào là [số ước của ] .
Do nên nó có tối đa ước nên số cạnh thêm vào là .
Vậy tổng số cạnh bây giờ là .
Độ phức tạp của Dijkstra là: