Một luồng trên mạng là một đồ thị có hướng G = (V, E)
với một đỉnh nguồn s ϵ V
và một đỉnh bồn rửa t ϵ V
, và nơi mỗi cạnh (u, v) ϵ E
trên đồ thị (kết nối các nút u ϵ V
và v ϵ V
) có 2 đại lượng liên kết với nó:
c(u, v) >= 0
, công suất của cạnha(u, v) >= 0
, chi phí gửi một đơn vị qua các cạnh
Chúng tôi xác định một hàm 0 <= f(u, v) <= c(u, v)
là số lượng đơn vị được truyền qua một cạnh nhất định (u, v)
. Vì vậy, chi phí cho một cạnh nhất định (u, v)
là a(u, v) * f(u, v)
. Các vấn đề dòng chảy tối thiểu chi phí được định nghĩa là giảm thiểu tổng chi phí trên tất cả các cạnh trong một khoảng dòng chảy cho d
, do số lượng như sau:
Các ràng buộc sau đây áp dụng cho vấn đề:
- Yêu cầu về công suất : lưu lượng qua một cạnh cho trước có thể không vượt quá khả năng của cạnh đó (
f(u, v) <= c(u, v)
). - Đối xứng Skew : dòng chảy mặc dù một cạnh đã cho phải đối xứng khi hướng ngược lại (
f(u, v) = -f(v, u)
). - Bảo tồn dòng chảy : lưu lượng ròng vào bất kỳ nút không nguồn không chìm nào phải bằng 0 (đối với mỗi nút
u ∉ {s, t}
, tổng trên tất cảw
,sum f(u, w) = 0
). - Lưu lượng yêu cầu : lưu lượng ròng ra khỏi nguồn và lưu lượng ròng vào bồn phải vừa bằng lưu lượng yêu cầu qua mạng (tổng cộng tất cả
u
,sum f(s, u) = sum f(u, t) = d
).
Đưa ra một mạng lưu lượng G
và một luồng yêu cầu d
, xuất chi phí tối thiểu để gửi d
các đơn vị qua mạng. Bạn có thể cho rằng một giải pháp tồn tại. d
và tất cả các năng lực và chi phí sẽ là số nguyên không âm. Đối với một mạng có N
các đỉnh được gắn nhãn [0, N-1]
, đỉnh nguồn sẽ là 0
và đỉnh chìm sẽ là N-1
.
Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng. Hãy nhớ rằng đây là một cuộc cạnh tranh giữa các ngôn ngữ cũng như giữa các ngôn ngữ, vì vậy đừng ngại đăng một giải pháp bằng ngôn ngữ dài dòng.
Tích hợp được cho phép, nhưng bạn được khuyến khích đưa vào các giải pháp mà không có nội dung, như là một giải pháp bổ sung trong cùng một câu trả lời hoặc là một câu trả lời độc lập.
Đầu vào có thể theo bất kỳ cách hợp lý nào bao gồm năng lực và chi phí của từng cạnh và nhu cầu.
Các trường hợp thử nghiệm
Các trường hợp thử nghiệm được cung cấp theo định dạng sau:
c=<2D matrix of capacities> a=<2D matrix of costs> d=<demand> -> <solution>
c=[[0, 3, 2, 3, 2], [3, 0, 5, 3, 3], [2, 5, 0, 4, 5], [3, 3, 4, 0, 4], [2, 3, 5, 4, 0]] a=[[0, 1, 1, 2, 1], [1, 0, 1, 2, 3], [1, 1, 0, 2, 2], [2, 2, 2, 0, 3], [1, 3, 2, 3, 0]] d=7 -> 20
c=[[0, 1, 1, 5, 4], [1, 0, 2, 4, 2], [1, 2, 0, 1, 1], [5, 4, 1, 0, 3], [4, 2, 1, 3, 0]] a=[[0, 1, 1, 2, 2], [1, 0, 2, 4, 1], [1, 2, 0, 1, 1], [2, 4, 1, 0, 3], [2, 1, 1, 3, 0]] d=7 -> 17
c=[[0, 1, 4, 5, 4, 2, 3], [1, 0, 5, 4, 3, 3, 5], [4, 5, 0, 1, 5, 5, 5], [5, 4, 1, 0, 3, 2, 5], [4, 3, 5, 3, 0, 4, 4], [2, 3, 5, 2, 4, 0, 2], [3, 5, 5, 5, 4, 2, 0]] a=[[0, 1, 4, 2, 4, 1, 1], [1, 0, 3, 2, 2, 1, 1], [4, 3, 0, 1, 4, 5, 2], [2, 2, 1, 0, 2, 2, 3], [4, 2, 4, 2, 0, 4, 1], [1, 1, 5, 2, 4, 0, 2], [1, 1, 2, 3, 1, 2, 0]] d=10 -> 31
c=[[0, 16, 14, 10, 14, 11, 10, 4, 3, 16], [16, 0, 18, 19, 1, 6, 10, 19, 5, 4], [14, 18, 0, 2, 15, 9, 3, 14, 20, 13], [10, 19, 2, 0, 2, 10, 12, 17, 19, 22], [14, 1, 15, 2, 0, 11, 23, 25, 10, 19], [11, 6, 9, 10, 11, 0, 14, 16, 25, 4], [10, 10, 3, 12, 23, 14, 0, 11, 7, 8], [4, 19, 14, 17, 25, 16, 11, 0, 14, 5], [3, 5, 20, 19, 10, 25, 7, 14, 0, 22], [16, 4, 13, 22, 19, 4, 8, 5, 22, 0]] a=[[0, 12, 4, 2, 9, 1, 1, 3, 1, 6], [12, 0, 12, 16, 1, 2, 9, 13, 2, 3], [4, 12, 0, 2, 2, 2, 2, 10, 1, 1], [2, 16, 2, 0, 2, 1, 8, 4, 4, 2], [9, 1, 2, 2, 0, 5, 6, 23, 5, 8], [1, 2, 2, 1, 5, 0, 13, 12, 12, 1], [1, 9, 2, 8, 6, 13, 0, 9, 4, 4], [3, 13, 10, 4, 23, 12, 9, 0, 13, 1], [1, 2, 1, 4, 5, 12, 4, 13, 0, 13], [6, 3, 1, 2, 8, 1, 4, 1, 13, 0]] d=50 -> 213
Các trường hợp thử nghiệm này đã được tính toán với thư viện NetworkX Python .