最小費用最大流

2021-08-31 14:55:44 字數 2916 閱讀 1465

1

、給定有向圖g=

(v,e

),每條邊e

具有正整數容量,源點為s

,匯點為t

。假設g

的最大流整數流為f

。現在取e

中的一條邊,把它的容量增加乙個單位,證明如何在o(m+n)

的時間內在新容量的圖中找到乙個最大流。這裡m

是g中的邊數,n

是節點數。

證明:假設把邊e1

增加乙個單位容量,取新圖的殘留網路,運用廣度優先搜尋的辦法搜尋一條增廣路經p

(時間代價為o(m)

)。若p

不存在,則原圖的流f

即是新圖的最大流;若p

存在,則p

經過e1

。否則,原圖g

最大流f

的殘留網路也存在增廣路徑p

,f不是最大流,產生矛盾。

對於新圖中每條邊e2 =

(u,v

),若e2

屬於p,則在流f

中相應的邊f

(u,v

)加1,所得到的新流f1

便是新圖的最大流(時間代價為o(n))。

因為e2

屬於p,所以e2

的殘留容量》=1

,而e1

的殘留容量為1

,否則,原圖g

最大流的殘留網路也存在增廣路徑p

,矛盾。所以這條增廣路徑上的每條邊只能為新流f1

貢獻乙個單位流量。再取f1

的殘留網路,則e1

的殘留容量為0

,若能找到不經過e1

的增廣路徑p1

,則原圖g

最大流f

的殘留網路也有這條增廣路徑,從而f

不是g的最大流。所以p1

經過e1

,但e1

的殘留容量為0

,沒有增廣路徑。所以f1

便是新圖的最大流。所有操作總的時間代價為o(m+n)。#

2、證明對任意一對節點(u

,v)和任意的容量函式c

和流函式f

,下列等式成立:cf(u,v)+ cf(v,u)=c(u,v)+c(v,u)

證明:cf(u,v)+ cf(v,u)=c(u,v)-f(u,v)+c(v,u)-f(v,u)=c(u,v)+c(v,u).# 3

、假期醫生排班問題。假設有個醫院要保證每個假日至少有乙個醫生上班。一共有k

個假期,每個要連續幾天。令是包含在第j

個假期的日期集合。醫院共有n

個醫生,每個醫生i

有乙個可以工作的假日集合。

請給出乙個多項式演算法確定在下面的約束下能否在每個假日都找到乙個醫生上班:

(1)給定引數c

,每個醫生應該被分配總計不超過c

個假日來工作,並且只能在他/

她能去工作的日期

(2)對每個假期,每個被分配工作的醫生至多工作一天

要求演算法返回乙個滿足這些約束的分配醫生的方案,或者(正確)報告沒有這樣的分配方案存在。

解:構造乙個有向圖g

:源點s

出發構造n

條邊分別指向n

個點,這n

個點s1,s2,s3,……sn

代表n個醫生,每條邊的容量為c

,代表每個醫生不能工作超過c

個假日。每個醫生si

出發有k

條邊分別指向k

個點si1 , si2 … sik

,這k個點代表這個醫生可能被分配到k

個假期d1

,d2,……dk

中的某乙個,並且設定每條邊的容量為1

,代表每個醫生對於某個假期最多只能工作一天。對於每個假期的每一天分別構造乙個點,比如dj

假期有m

個假日,分別用點dj1

,dj2……djm

代表這m

個假日,並從每個點出發構造一條有向邊指向匯點t

,邊的容量為1

,表示該假日只要有乙個醫生工作即可,多於的醫生資源可以用於其他假日,以防醫生不足。某個醫生si

假設在dj

假期內有可工作的假日djm

,則構造一條邊從sij

指向djm

,這條邊的容量設定為1

。這個圖的流都是整數流,對這個圖找出乙個最大流f

,假設f

的大小<

所有假日總天數,則一定不存在滿足題意的分配方案。反證:假設存在滿足題意的分配方案,初始化當前流f

為0,若某個醫生si

被分配到dj

假期的djm

假日工作,則增加如下一條路徑s->si->sij->djm->t

到當前流f

中,由假設可知遍歷一遍分配方案後,得到每個假日到匯點t

的有向邊上容量為1

的邊被完全占用,因此,f

已達到最大流,並且大小=

所有假日總天數,矛盾,故一定不存在滿足題意的分配方案。顯然最大流f

的大小不可能超過所有假日總天數,假設f

的大小=

所有假日總天數,則根據這個有向圖構造時的定義可知,每個假日都至少有乙個醫生工作,這就構成乙個分配方案,只需按照每個醫生遍歷一遍即可輸出分配方案。

時間代價:演算法的主要操作是構造乙個有向圖g

,可在多項式時間內完成,得到圖的規模是o(n+k)

的,找出最大流,這個時間代價也是多項式規模的,遍歷一遍圖得到輸出方案也是多項式時間的,故整個演算法可在多項式時間內完成。# 4

、下圖中是乙個流的剩餘網路,邊上標的數字是邊的單位流費用。 (1

)請問這個剩餘網路對應的流是最小費用流嗎?為什麼? (2

)如果這個剩餘網路中的所有邊的容量都是3

,如何將流的費用降低6?

解: (1

)不是,裡面有負迴路:a->c->d->b->a

。費用之和為-2;

(2)在ac

、cd、bd

、ba邊分別增加3

個單位流量。

最小費用最大流

網 絡流的基本問題為 設乙個有向賦權圖g v,e v 其中有兩個特殊的節點s和s s稱為發點,s 稱為收點。圖中各 邊的方向和權數表示允許的流向和最大可能的流量 容量 問在這個網路圖中從發點流出到收點匯集,最大可通過的實際流量為多少?流向的分布情況為怎樣?設有乙個網路圖g v,e v e中的每條邊 ...

最小費用最大流

const int maxn 250 const int maxm 62272 const int inf 0x4ffffff int n,m struct edge edge maxm int head maxn cnt void init void addedge int u,int v,int...

最小費用最大流

看了最小費用最大流的問題,感覺好難啊,想不到,關鍵就是想不到,知道模板什麼用,只是能a題僅此而已,要想學深真的不是件容易的事情啊。為此我總結了以下幾點供複習知識點或者是講課時用 網路流的費用 在實際應用中,與網路流有關的問題,不僅涉及流量,而且還有費用的因素。網路的每一條邊 v,w 除了給定容量ca...