分別稱為流量限制條件和流量平衡條件 而在有上下界的網絡流圖中,由于多了流量下界
將有上下界的網絡流圖轉化成普通的網絡流圖
首先建立附加源點ss和附加匯點tt對于原圖中的邊x->y,若限制為[b,c],那么連邊x->y,流量為c-b對于原圖中的某一個點i,記d(i)為流入這個點的所有邊的下界和減去流出這個點的所有邊的下界和 若d(i)>0,那么連邊ss->i,流量為d(i)若d(i)<0,那么連邊i->tt,流量為-d(i)在新圖上跑ss到tt的最大流 若新圖滿流,那么一定存在一種可行流 此時,原圖中每一條邊的流量應為新圖中對應的邊的流量+這條邊的流量下界
在原圖中,假設每條邊的實際流量為
我們可以將原圖中的邊改為上界為
舉個栗子 原圖 按照上面的方法改造過的新圖
這個圖的可行流為1,還原成原圖的實際流量為
很顯然滿足流量限制條件,但是不滿足流量平衡條件 即
由于需要滿足流量平衡條件 當
可以發現,添加的所有與附加源點或者附加匯點相連的邊必須滿流,原圖才有可行流 證畢
在原圖中添加一條邊t->s,流量限制為[0,inf] 即讓源點和匯點也滿足流量平衡條件 這樣就改造成了無源匯的網絡流圖 其余方法同上
同 無源匯可行流
同 無源匯可行流
同有源匯可行流
在新圖上跑ss到tt的最大流 若新圖滿流,那么一定存在一種可行流 記此時
添加附加源匯的作用:為了滿足流量平衡條件,在新圖中進行相應的補流或分流 只要連接附加源匯的邊滿流,新圖中s->t的任意一種可行流都是原圖的可行流 跑ss->tt的最大流了之后,相當于是使連接附加源匯的邊滿流,進而求出了一種可行流 再將t->s的邊拆掉(使s->t變成一個有源匯的網絡流圖),跑s到t的最大流,加上跑出來的最大流即為原圖中一種可行的最大流
同 無源匯可行流
求ss->tt最大流 連邊t->s,inf 求ss->tt最大流 答案即為邊t->s,inf的實際流量
第一遍做的時候并無t->s這條邊,所以s->t的流量已經盡力往其它邊流了 加上t->s這條邊后,流過這條邊的都是些剩余的流不到其他邊的流量,從而達到盡可能減少T->S這邊上的流量的效果,即減小了最終答案。
將有上下界的網絡流圖轉化成普通的網絡流圖
首先建立附加源點ss和附加匯點tt對于原圖中的邊x->y,若限制為[b,c],費用為cost,那么連邊x->y,流量為c-b,費用為cost對于原圖中的某一個點i,記d(i)為流入這個點的所有邊的下界和減去流出這個點的所有邊的下界和 若d(i)>0,那么連邊ss->i,流量為d(i),費用為0若d(i)<0,那么連邊i->tt,流量為-d(i),費用為0連邊t->s,流量為inf,費用為0跑ss->tt的最小費用最大流 答案即為(求出的費用+原圖中邊的下界*邊的費用)
注意: 有上下界的費用流指的是在
證明同 有源匯的可行流
重點理解“補流”和“分流”的作用 注意流的“等效”
新聞熱點
疑難解答