前言
之前學習上下界網路流的時候,花了很多時間去理解建模的方式和原理,然而今天覆習的時候發現忘得差不多了qwq。於是參考了一下以前的**,再次做了個總結,放在部落格裡,省得以後忘掉qwq。
無源匯可行流
建模方法:
首先建立乙個源$ss$和乙個匯$tt$,一般稱為附加源和附加匯。
對於圖中的每條弧$$,假設它容量上界為$c$,下界$b$,那麼把這條邊拆為三條只有上界的弧。
一條為$$,容量為$b$;
一條為$$,容量為$b$;
一條為$$,容量為$c-b$。
其中前兩條弧一般稱為附加弧。
然後對這張圖跑最大流,以$ss$為源,以$tt$為匯,如果所有的附加弧都滿流,則原圖有可行流。
這時,每條非附加弧的流量加上它的容量下界,就是原圖中這條弧應該有的流量。
理解方法:
對於原圖中的每條弧,我們把$c-b$稱為它的自由流量,意思就是只要它流滿了下界,這些流多少都沒問題。
既然如此,對於每條弧$$,我們強制給$v$提供$b$單位的流量,並且強制從$u$那裡拿走$b$單位的流量,這一步對應著兩條附加弧。
如果這一系列強制操作能完成的話,也就是有一組可行流了。
注意:這張圖的最大流只是對應著原圖的一組可行流,而不是原圖的最大或最小流。
有源匯可行流
建模方法:
建立弧$$,容量下界為$0$,上界為$\infty$。
然後對這個新圖(實際上只是比原圖多了一條邊)按照無源匯可行流的方法建模,如果所有附加弧滿流,則存在可行流。
求原圖中每條邊對應的實際流量的方法,同無源匯可行流,只是忽略掉弧$$就好。
而且這時候弧$$的流量就是原圖的總流量。
理解方法:
有源匯相比無源匯的不同就在於,源和匯是不滿足流量平衡的,那麼連線$$之後,源和匯也滿足了流量平衡,就可以直接按照無源匯的方式建模。
注意:這張圖的最大流只是對應著原圖的一組可行流,而不是原圖的最大或最小流。
有源匯最大流
建模方法:
首先按照有源匯可行流的方法建模,如果不存在可行流,更別提什麼最大流了。
如果存在可行流,那麼在執行過有源匯可行流的圖上(就是已經存在流量的那張圖,流量不要清零),跑一遍從$s$到$t$的最大流(這裡的$s$和$t$是原圖的源和匯,不是附加源和附加匯),就是原圖的最大流。
理解方法:
為什麼要在那個已經有了流量的圖上跑最大流?因為那張圖保證了每條弧的容量下界,在這張圖上跑最大流,實際上就是在容量下界全部滿足的前提下盡量多得獲得「自由流量」。
注意,在這張已經存在流量的圖上,弧$$也是存在流量的,千萬不要忽略這條弧。因為它的相反弧$$的流量為$$的流量的相反數,且$$的容量為0,所以這部分的流量也是會被算上的。
有源匯最小流
有源匯最小流的常見建模方法比較多,我就只說我常用的一種。
建模方法:
首先按照有源匯可行流的方法建模,但是不要建立$$這條弧。
然後在這個圖上,跑從附加源$ss$到附加匯$tt$的最大流。
這時候再新增弧$$,下界為$0$,上界為$\infty$。
在現在的這張圖上,從$ss$到$tt$的最大流,就是原圖的最小流。
理解方法:
我們前面提到過,有源匯可行流的流量只是對應一組可行流,並不是最大或者最小流。
並且在跑完有源匯可行流之後,弧$$的流量就是原圖的流量。
從這個角度入手,我們想讓弧$$的流量盡量小,就要盡量多的消耗掉那些「本來不需要經過$$」的流量。
於是我們在新增$$之前,跑一遍從$ss$到$tt$的最大流,就能盡量多的消耗那些流量啦qwq。
總結
口胡完畢。
我姿勢水平不高,沒見過什麼上下界網路流的題(或許真的不常考?),唯一見過的一道就放上來叭qwq。
題目與題解
inspection la 4597 neerc 2009
題解還請看我的部落格qwq:
有上下界網路流建模方法
無源匯可行流 建模方法 首先建立乙個源s s ss ss和乙個匯t t tt tt,一般稱為附加源和附加匯。對於圖中的每條弧v 假設它容量上界為c c c,下界b b b,那麼把這條邊拆為三條只有上界的弧。一條為,v 容量為b b b 一條為tt 容量為b b b 一條為v 容量為c b c b c...
上下界網路流總結
orz zhhx orz yyb orz aysn 無源匯可行流 每條邊取 l i 最大流調整 有源匯可行流 e t,s,inf 無源匯可行流 有源匯最小流 有源匯可行流 去掉 inf 邊 t rightarrow s 最大流 有源匯最大流 有源匯可行流 去掉 inf 邊 s rightarrow ...
上下界網路流總結
我們普通的網路流題中每條邊有乙個容量,或者是說每條邊實際流量在 0,容量 之間 帶上下界的網路流意思就是說每條邊有乙個最小流量和乙個最大流量 問題大概分為三種 1.無源匯帶上下界可行流 假設一條邊是u v的 lower,upper 我們可以把這條邊拆成兩條,一條邊必須流過 0,lower 的流量,另...