1. 程式人生 > >上下界網路流

上下界網路流

無源匯上下界可行流

構建虛擬源點SS,虛擬匯點TT 若i點原來 入>出,則SS向i連一條容量為其差值的邊 若i點原來 出>入,則i向TT連一條容量為其差值的邊 因為一條邊最終流量等於 下界+新圖對應流量,原來流量不平衡的點需要用虛擬源匯來補償流量

因為當且僅當SS的所有連邊都滿流時有解 所以刷SS到TT的最大流即可 前面提過,一條邊最終流量等於 下界+新圖對應流量,根據這個可以求一些題目的答案

有源匯上下界可行流

(給定源匯是S和T,虛擬源匯是SS和TT,不要混淆起來!) 考慮連一條T到S的無限制的邊 那麼有源匯就轉化成了無源匯

值得一提的是,如果想要知道可行流的流量,可以直接看T到S那條新加邊的流量(根據流量守恆)

有源匯上下界最大流

先刷出一個可行流 如果有解,那麼SS的所有邊都滿流了,也就完成了它的使命 接下來只需要刷S到T的最大流即可 (接下來S到T不管怎麼變,都影響不了SS的出邊,所以一直是滿足流量守恆的) (而且這是殘量網路,不用考慮會突破下界) 不過我個人還是習慣把SS,TT的所有邊以及T到S的那條邊刪去,這樣感覺清爽一點

答案是可行流流量+S到T最大流流量

有源匯上下界最小流

還是要先刷出可行流 和最大流一樣的道理,此時需要把S到T的流量儘量減小 可是……可是好像沒有這種操作啊(臉紅 考慮反向弧的本質:反向弧增加意味著正向弧減少 所以刷T到S的最大流

答案是可行流流量-T到S最大流流量