Problem

4 /10


con đường ngắn nhất

Theory Click to read/hide

Nếu một biểu đồ có các chu kỳ có trọng số âm, thì chính thức thuật toán Floyd-Warshall không thể áp dụng cho biểu đồ đó.

Trên thực tế, đối với các cặp đỉnh i j mà giữa chúng không thể nhập một chu trình có trọng số âm, thuật toán sẽ hoạt động chính xác.

Đối với các cặp đỉnh giống nhau mà không có đáp số (do có chu trình âm trên đường đi giữa chúng), thuật toán Floyd sẽ tìm một số nào đó (có thể âm mạnh, nhưng không nhất thiết) làm đáp án. Tuy nhiên, thuật toán của Floyd có thể được cải thiện để xử lý gọn gàng các cặp đỉnh như vậy và xuất ra ví dụ: \(- \infty\).

Để làm điều này, ví dụ: có thể thực hiện tiêu chí "không tồn tại đường dẫn" sau đây. Vì vậy, hãy để thuật toán Floyd thông thường hoạt động trên biểu đồ này. Khi đó, không có đường đi ngắn nhất giữa các đỉnh i và j if và chỉ khi có một đỉnh t có thể tới được từ i và từ đó có thể tới được j, với  \(d [t][t]<0\).

Ngoài ra, khi sử dụng thuật toán Floyd cho đồ thị có chu kỳ âm, cần nhớ rằng khoảng cách phát sinh trong quá trình làm việc có thể âm theo cấp số nhân theo từng pha. Do đó, bạn nên cẩn thận chống tràn số nguyên bằng cách giới hạn tất cả các khoảng cách từ bên dưới đến một giá trị nào đó (ví dụ:  \(- \infty\)).

Giải pháp có thể được mô tả bằng lời nói như sau:
Sau khi thuật toán Floyd-Warshall hoạt động cho đồ thị đầu vào, hãy lặp lại trên tất cả các cặp đỉnh \((i,j)\) và cho từng cặp như vậy chúng tôi kiểm tra, vô hạn đường đi ngắn nhất từ ​​i đến j có nhỏ hay không. Để làm điều này, hãy lặp qua đỉnh thứ ba t và nếu nó trở thành \(d[t][t] < 0\)  (tức là nó nằm trong chu kỳ có trọng số âm) và có thể truy cập được từ i và j — thì đường dẫn \((i,j)\) có thể có độ dài vô cùng nhỏ.

Problem

Bạn được cung cấp một đồ thị đầy đủ có hướng với một số trọng số (độ dài) được gán cho các cạnh của nó. Trọng số có thể dương, âm hoặc bằng không. Chúng tôi quan tâm đến độ dài tối thiểu của tất cả các đường đi có thể có giữa tất cả các cặp đỉnh khác biệt trong biểu đồ này. Cần phải tìm hiểu xem mức tối thiểu này có tồn tại hay không và nếu có, hãy tính toán nó. (Không có giá trị nhỏ nhất nếu có thể tìm thấy một đường dẫn có độ dài âm trong biểu đồ, lớn tùy ý về giá trị tuyệt đối, có xu hướng vô cực).
 
Đầu vào
Dòng đầu tiên là N≤50 đỉnh. Tiếp theo là ma trận kề của đồ thị, tức là N hàng, mỗi hàng chứa N số. Số thứ j trong hàng thứ i của ma trận kề xác định độ dài của cạnh dẫn từ đỉnh thứ i đến đỉnh thứ j. Độ dài có thể nhận bất kỳ giá trị nào từ -1000000 đến 1000000. Đảm bảo rằng không có số 0 trên đường chéo chính của ma trận.
 
Đầu ra
In một số duy nhất – yêu cầu tối thiểu. Nếu nó không tồn tại, hãy xuất  -1.
Ví dụ <đầu>
# Đầu vào Đầu ra
1
3
0 42 18468 
6335 0 26501 
19170 15725 0 
42
2
3
0 -7 3
-2 0 10
2 215 0 
-1