네트워크 흐름은 방향성 그래프 G = (V, E)
소스 꼭지점 s ϵ V
및 싱크 정점 t ϵ V
마다 에지와 (u, v) ϵ E
(노드를 연결하는 그래프 u ϵ V
및 v ϵ V
)과 연관된 2 개 수량을 가지고
c(u, v) >= 0
가장자리의 용량a(u, v) >= 0
가장자리를 통해 하나의 단위를 보내는 비용
우리는 함수 0 <= f(u, v) <= c(u, v)
가 주어진 가장자리를 통과하는 단위의 수로 정의합니다 (u, v)
. 따라서 주어진 모서리의 비용 (u, v)
은 a(u, v) * f(u, v)
입니다. 최소 비용 흐름 문제는 소정의 유량에 대한 모든 가장자리 위에 총 비용 최소화로 정의 d
다음의 수량을 주어진 :
다음 제한 사항이 문제점에 적용됩니다.
- 용량 요구 사항 : 주어진 모서리를 통한 흐름이 해당 모서리의 용량을 초과 할 수 없습니다 (
f(u, v) <= c(u, v)
). - 기울기 대칭 : 방향이 반대 일 때 주어진 모서리를 통한 흐름은 비대칭이어야합니다 (
f(u, v) = -f(v, u)
). - 보존 흐름 : 비 싱크가 아닌 소스 노드에 그물 흐름이 0이어야합니다 (각각
u ∉ {s, t}
, 온통 합산w
,sum f(u, w) = 0
). - 필요한 유량 : 그물 소스 모두 네트워크를 통해 필요한 흐름을 동일해야 싱크대에 그물 흐름의 유출 (모든 것을 합산
u
,sum f(s, u) = sum f(u, t) = d
).
흐름 네트워크 G
와 필요한 흐름이 주어지면 네트워크를 통해 장치를 d
보내는 데 필요한 최소 비용을 출력하십시오 d
. 솔루션이 있다고 가정 할 수 있습니다. d
모든 용량과 비용은 음이 아닌 정수입니다. 로 N
표시된 정점이 있는 네트워크의 [0, N-1]
경우 소스 정점이 0
되고 싱크 정점이됩니다 N-1
.
이것은 코드 골프가장 짧은 답변 (바이트)이 이깁니다. 이것은 언어와 언어 사이의 경쟁이기 때문에 자세한 언어로 솔루션을 게시하는 것을 두려워하지 마십시오.
기본 제공은 허용되지만 기본 제공없이 솔루션을 동일한 답변의 추가 솔루션 또는 독립적 인 답변으로 포함하는 것이 좋습니다.
입력은 각 에지의 용량 및 비용 및 수요를 포함하는 임의의 합리적인 방식 일 수있다.
테스트 사례
테스트 케이스는 다음 형식으로 제공됩니다.
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
이 테스트 사례는 NetworkX Python 라이브러리를 사용하여 계산되었습니다 .