前言
不錯的文章:
無源匯上下界可行流:
模型:乙個網路,求出乙個流,使得每條邊的流量必須≥
l\ge l
≥l且≤
r\le r
≤r,每個點必須滿足總流入量 = 總流出量 (流量守恆) (這個流的特點是迴圈往復,無始無終)
考慮到如果存在乙個可行流,那麼每條邊的流量至少是 l
ll,於是我們可以預先讓它先流 lll
這樣以後乙個點流入量可能就不為流出量了
我們考慮求出乙個附加流,每條邊的最終流量為附加流流量加上 lll
具體而言,我們建邊建成 (u,
v,r−
l)
(u,v,r-l)
(u,v,r
−l)
考慮到最後要讓流量平衡,分類討論:
如果乙個點的初始流入 = 流出那麼它平衡了
如果初始流入 > 流出,那麼這個點在附加流中流入 < 流出,稱為 a
aa 類點
如果初始流入 < 流出,那麼附加流流入 > 流出,稱為 b
bb 類點
記差量為 ∣δ∣
|\delta|
∣δ∣
為了使流量平衡,我們建立超級源匯 s,t
s,ts,
t,ss
s 向 a
aa 類點連邊,流量為 ∣δ∣
|\delta|
∣δ∣b
bb 類點向 t
tt 連邊,流量為 ∣δ∣
|\delta|
∣δ∣
容易發現,與源點匯點s,t
s,ts,
t向連的邊邊權和是相等的
有解當且僅當把不平衡的流量填平,也就是 s,t
s,ts,
t 的所有出邊入邊滿流
跑乙個 s
ss 到 t
tt 的最大流即可
有源匯上下界可行流
源點和匯點的流量始終不會平衡
考慮到源點出去的流量 = 匯點進的流量,匯點向源點連流量 +
∞+\infty
+∞的邊就可以平衡
整個可行流的流量就是匯點到源點那條邊的流量
有源匯有上下界最大流
在滿足可行即流量平衡的條件下流量最大
建圖如上,我們發現殘餘網路中有些邊是沒有跑滿的
把與超級源匯的邊斷開,然後在殘餘網路上跑乙個原圖 s,t
s,ts,
t 的最大流
最終的最大流需要加上原本的可行流
最小流可以倒過來跑,t
tt 到 sss
無源匯上下界最小費用可行流
同樣建立超級源匯 s,t
s,ts,
t 對於邊 (u,
v,l,
r,co
st
)(u,v,l,r,cost)
(u,v,l
,r,c
ost)
,建邊 (u,
v,r−
l,co
st
)(u,v,r-l,cost)
(u,v,r
−l,c
ost)
,並將初始值加上 l∗c
os
tl*cost
l∗cost
對於那些流量不平衡的點,建邊同 「 無源匯上下界可行流 」,費用為 0
然後跑 s
ss 到 t
tt 的最小費用最大流
有源匯加一條原圖中 (t,
s,∞,
0)
(t,s,\infty,0)
(t,s,∞
,0)
上下界費用流
codeforces 708d incorrect flow 這是道可行流最小費用的題目,這題好神奇。看這老哥的題解就ok了。戳這 我覺得他少說了一條邊,但 中卻體現了,就是一條流量為 f,f 的邊,費用為0,就是固定流量的一條邊。還要注意一點是,f c 的時候,f 往下調到 c 以下時,c 是不動...
上下界網路流學習筆記
一些點,一堆邊,每條邊要滿足流量限制 l,r 先令每條邊流量等於流量下限,得到初始流,初始流可能不滿足流量守恆,再建出殘量網路 上限 下限 求出可能不滿足流量守恆的附加流,使附加流和初始流合併後滿足流量守恆 定義 a i 表示初始流中流入量 流出量 若 a i 0 表示流入量大於流出量,附加量需要流...
學習筆記 上下界網路流
上下界網路流本質上是給流量網路的每一條便設定了流量上界 c u,v 和下界 b u,v 無源匯上下界可行流 給定無源匯流量網路 g 詢問是否存在一種標定每條邊流量的方式,使得每條邊流量滿足上下界同時每乙個點流量平衡。不妨假設每條邊已經流了 b u,v 的流量,設其為初始流。同時我們在新圖中加入 u ...