Bir akış ağı , bir G = (V, E)
kaynak tepe noktası s ϵ V
ve bir lavabo tepe noktası bulunan yönlendirilmiş bir grafiktir ve grafikteki t ϵ V
her kenarın (u, v) ϵ E
(bağlantı düğümleri u ϵ V
ve v ϵ V
) kendisiyle ilişkilendirilmiş 2 miktarı vardır:
c(u, v) >= 0
, kenar kapasitesia(u, v) >= 0
, bir birimi kenardan gönderme maliyeti
Bir işlevi 0 <= f(u, v) <= c(u, v)
, belirli bir kenardan geçirilen birim sayısı olarak tanımlarız (u, v)
. Dolayısıyla, belirli bir kenar maliyeti (u, v)
olan a(u, v) * f(u, v)
. En düşük maliyetli akış problemi , belirli bir akış miktarı için her bir kenar üzerinden toplam maliyetini en aza indirmek olarak tanımlanır d
, aşağıdaki miktar ile verilir:
Sorun için aşağıdaki kısıtlamalar geçerlidir:
- Kapasite gereksinimleri : belirli bir kenardan geçen akış, o kenarın kapasitesini aşamaz (
f(u, v) <= c(u, v)
). - Eğri simetrisi : yön ters çevrildiğinde belirli bir kenardaki akış antisimetrik olmalıdır (
f(u, v) = -f(v, u)
). - Koruma Akış : olmayan emici olmayan kaynak düğüm, net akış 0 olmalıdır (her biri için
u ∉ {s, t}
, her üzerinden toplamaw
,sum f(u, w) = 0
). - Gerekli akış : kaynaktan çıkan net akış ve lavaboya giden net akış, hem ağ üzerinden gerekli akışa eşit olmalıdır (toplamı toplamak
u
,sum f(s, u) = sum f(u, t) = d
).
Bir akış ağı G
ve gerekli bir akış göz önüne alındığında d
, d
üniteleri ağ üzerinden göndermek için minimum maliyeti girin . Bir çözümün var olduğunu varsayabilirsiniz. d
ve tüm kapasiteler ve maliyetler negatif olmayan tamsayılar olacaktır. N
Köşeleri etiketli bir ağ [0, N-1]
için kaynak tepe noktası 0
ve lavabo tepe noktası olacaktır N-1
.
Bu kod golf, böylece en kısa cevap (bayt cinsinden) kazanır. Bunun hem diller içinde hem de diller arasında bir rekabet olduğunu unutmayın, bu yüzden ayrıntılı bir dilde çözüm yayınlamaktan korkmayın.
Yerleşiklere izin verilir, ancak aynı cevapta ek bir çözüm olarak veya bağımsız bir cevap olarak yerleşiksiz çözümler eklemeniz önerilir.
Girdi, her bir kenarın ve talebin kapasitelerini ve maliyetlerini içeren herhangi bir makul şekilde olabilir.
Test Durumları
Test senaryoları aşağıdaki biçimde sağlanır:
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
Bu test senaryoları NetworkX Python kütüphanesi ile hesaplanmıştır .