自己对有上下界的网络流的理解
生活随笔
收集整理的這篇文章主要介紹了
自己对有上下界的网络流的理解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? 首先說一下,什么是上下流,上下流也就是有上下界的網絡流,正常的網絡流都是只有上界,沒有下界,但是當有下界限制的時候就可能出現因不能滿足所有下界而無解的情況,這種問題一般分為三種問法,有源/無源可行流判斷,有源最大流,有源最小流,首先先說下怎么處理上下界,首先對于一條邊 from to min max,我們可以把他拆成兩個部分,第一部分就是 from->to max-min ,max - min是除了限制以外可以自由流動的流量,我們可以簡單的叫他自由邊,然后第二部分有兩部分組成,首先虛擬超級源點ss,超級匯點tt,然后建邊from -> tt min 和 ss -> ss min,這么建邊的原因是在流中,任何點的入流量都必須等于出流量,對于這兩條邊是必須流滿的,所以叫必須邊,如果有一條邊沒有流滿,那么就是沒有可行解。因為最后所有的點必須滿足入流等于出流。
?(1)有源/無源可行流判斷
? ? ? ? 這個是最基礎的,無論哪種問法都必須要先判斷是否可行,對于有源的,我們可以直接建立一條邊t -> s 0 inf ,這樣就把有源變成了無源,對于無源的可行流判斷,我們只要按照上面的建邊拆邊方式建圖之后,跑一遍ss到tt的最大流,如果所有必須邊都滿流,那么就是有解,否則無解,如果要輸出答案,在殘余網絡中找到非必須邊,非必須邊的流量加上該邊的下限就行了(因為下限已經滿流).
?(2)有源最大流
? ? ? ? 首先要做(1)那樣的處理,如果判斷有解了,s,t之間的流量,尤其是自由邊的流量有可能沒有用完,我們直接在殘余網絡上跑一遍s,t的最大流,最后答案就是當前的這個流量+所有的下限。
?(3)有源最小流
? ? ? ?這個比較特別,我還沒有見過這樣的題目,可以分三個步驟處理
? ? ? (1)先不加t->s,跑一遍 ss -> tt的最大流記為f1,目的是為了讓所有的必須邊都盡可能的滿流。
? ? ? (2) 然后直接在殘余網絡上添加 t->s 0 inf 的邊,把當前的邊記為w
? ? ? (3) 然后在跑一遍 ss -> tt的最大流,記為f2
? ?
?如果所有的必須邊都滿流了,那么w這條邊的流量就是s的入流量,也是出流量,也是s流出去的最小流。至于為什么,其實我也不是很清楚,但我現在唯一的理解就是,一開始不建t->s是為了盡可能的不浪費s的出流量(因為不建,入流量就是0),保存實力,跑一遍之后,把用到的別人的力量全都用完了,然后在t->s,然后在跑一遍,這樣應該是s所流出的東西是盡可能最小的了吧,又因為 入=出,所以s流出的等于w的流量,等于s到t的最最小流。
?
總結
以上是生活随笔為你收集整理的自己对有上下界的网络流的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 2396 构造矩阵(上下流)
- 下一篇: hdu2604 矩阵快速幂