#G00002. Đường đi ngắn nhất giữa mọi cặp đỉnh (All-Pairs Shortest Paths)
Đường đi ngắn nhất giữa mọi cặp đỉnh (All-Pairs Shortest Paths)
Đường đi ngắn nhất giữa mọi cặp đỉnh
Nguồn: Luogu
Phiên bản: Phước Hưng OJ Extended
Đề bài
Cho một đồ thị có hướng gồm đỉnh và cạnh có trọng số. Các đỉnh được đánh số từ đến .
Mỗi cạnh có dạng , biểu diễn một cạnh có hướng đi từ đỉnh đến đỉnh với trọng số .
Độ dài của một đường đi được định nghĩa là tổng trọng số của tất cả các cạnh thuộc đường đi đó.
Với mọi cặp đỉnh , gọi là độ dài đường đi ngắn nhất từ đỉnh đến đỉnh .
Đồ thị có thể chứa:
- cạnh có trọng số âm;
- nhiều cạnh cùng đi từ một đỉnh đến một đỉnh khác;
- cạnh khuyên.
Nếu tồn tại một chu trình có tổng trọng số âm trong đồ thị, đồ thị được coi là chứa chu trình âm.
Một số bộ dữ liệu được thiết kế đặc biệt để kiểm tra nghiêm ngặt các cài đặt không đủ hiệu quả khi xử lý lặp lại bài toán đường đi ngắn nhất từ từng đỉnh.
Input
Dòng đầu tiên chứa hai số nguyên , lần lượt là số đỉnh và số cạnh có hướng của đồ thị.
Trong dòng tiếp theo, mỗi dòng chứa ba số nguyên , biểu diễn một cạnh có hướng từ đỉnh đến đỉnh với trọng số .
Output
Nếu đồ thị chứa chu trình âm, chỉ in ra một dòng:
-1
Ngược lại, in ra dòng.
Ở dòng thứ , in giá trị
Trong đó:
- nếu tồn tại đường đi từ đến , là độ dài đường đi ngắn nhất từ đến ;
- nếu không tồn tại đường đi từ đến , quy ước ;
- nếu , quy ước .
Giá trị cần in có thể vượt quá phạm vi của số nguyên có dấu bit.
Subtask
-
Trong tất cả các Subtask: ; ; ; .
-
Subtask 1 — 20%: ; đồ thị không chứa chu trình âm.
-
Subtask 2 — 20%: .
-
Subtask 3 — 60%: ; ; ; .
Ví dụ
Ví dụ 1
Input
5 7
1 2 4
1 4 10
2 3 7
4 5 3
4 2 -2
3 4 -3
5 3 4
Output
128
1000000072
999999978
1000000026
1000000014
Giải thích

Đồ thị không chứa chu trình âm.
Ma trận khoảng cách ngắn nhất giữa các cặp đỉnh là:
$$\begin{pmatrix} 0 & 4 & 11 & 8 & 11\\ 10^9 & 0 & 7 & 4 & 7\\ 10^9 & -5 & 0 & -3 & 0\\ 10^9 & -2 & 5 & 0 & 3\\ 10^9 & -1 & 4 & 1 & 0 \end{pmatrix}.$$Với đỉnh :
Với đỉnh , không tồn tại đường đi đến đỉnh , nên . Do đó:
$$1\cdot10^9+2\cdot0+3\cdot7+4\cdot4+5\cdot7 =1000000072.$$Tương tự:
$$1\cdot10^9+2\cdot(-5)+3\cdot0+4\cdot(-3)+5\cdot0 =999999978,$$$$1\cdot10^9+2\cdot(-2)+3\cdot5+4\cdot0+5\cdot3 =1000000026,$$và
$$1\cdot10^9+2\cdot(-1)+3\cdot4+4\cdot1+5\cdot0 =1000000014.$$Vì vậy năm dòng kết quả lần lượt là các giá trị đã cho trong Output.
Ví dụ 2
Input
5 5
1 2 4
3 4 9
3 4 -3
4 5 3
5 3 -2
Output
-1
Giải thích
Ba cạnh
$$3\rightarrow4,\qquad 4\rightarrow5,\qquad 5\rightarrow3$$với các trọng số lần lượt là , và tạo thành một chu trình có tổng trọng số
Do đồ thị chứa chu trình âm nên kết quả duy nhất cần in là -1.