1. 程式人生 > >帶有上下界的網絡流

帶有上下界的網絡流

費用流 unique 成了 spa blog target fontsize element preview

轉自:http://blog.csdn.net/clove_unique

f(u,v)表示u->v這條邊的實際流量
b(u,v)表示u->v這條邊的流量下界
c(u,v)表示u->v這條邊的流量上界
在一個無源匯的普通網絡流圖中,滿足

  • 0f(u,v)c(u,v)
  • f(u,i)=f(i,v)

分別稱為流量限制條件和流量平衡條件
而在有上下界的網絡流圖中,由於多了流量下界b(u,v)的限制,滿足

  • b(u,v)f(u,v)c(u,v)
  • f(u,i)=f(i,v)

無源匯可行流

建圖方法

將有上下界的網絡流圖轉化成普通的網絡流圖

  • 首先建立附加源點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的最大流
若新圖滿流,那麽一定存在一種可行流
此時,原圖中每一條邊的流量應為新圖中對應的邊的流量+這條邊的流量下界

證明

在原圖中,假設每條邊的實際流量為f(u,v)=b(u,v)+g(u,v)


其中g(u,v)c(u,v)b(u,v)

我們可以將原圖中的邊改為上界為c(u,v)b(u,v)的邊,變成一個普通的網絡流圖
經過以上的改造,g(u,v)實際上是新圖中邊u->v的實際流量,原圖中的實際流量f(u,v)=b(u,v)+g(u,v)
但是如果在這個新圖中直接求可行流的話是錯誤的

舉個栗子
原圖
技術分享
按照上面的方法改造過的新圖
技術分享
這個圖的可行流為1,還原成原圖的實際流量為
技術分享
很顯然滿足流量限制條件,但是不滿足流量平衡條件

由於需要滿足流量平衡條件
f(u,i)=f(i,v)
[b(u,i)+g(u,i)]=[b(i,v)+g(i,v)]


b(u,i)b(i,v)=g(i,v)g(u,i)
d(i)=b(u,i)b(i,v)
d(i)>0
g(i,v)=g(u,i)+d(i)
所以需要一條邊流量為d(i)來補流
技術分享
d(i)<0
g(u,i)=g(i,v)+[d(i)]
所以需要一條邊流量為d(i)來分流
技術分享
可以發現,添加的所有與附加源點或者附加匯點相連的邊必須滿流,原圖才有可行流
證畢

有源匯可行流

建圖方法

在原圖中添加一條邊t->s,流量限制為[0,inf]
即讓源點和匯點也滿足流量平衡條件
這樣就改造成了無源匯的網絡流圖
其余方法同上

求解方法

同 無源匯可行流

證明

同 無源匯可行流

有源匯最大流

建圖方法

同有源匯可行流

求解方法

在新圖上跑ss到tt的最大流
若新圖滿流,那麽一定存在一種可行流
記此時f(s,i)=sum1
將t->s這條邊拆掉,在新圖上跑s到t的最大流
記此時f(s,i)=sum2
最終答案即為sum1+sum2

證明

添加附加源匯的作用:為了滿足流量平衡條件,在新圖中進行相應的補流或分流
只要連接附加源匯的邊滿流,新圖中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的最小費用最大流
答案即為(求出的費用+原圖中邊的下界*邊的費用)

證明

註意:
有上下界的費用流指的是在滿的最小費用流
在滿足流量限制條件和流量平衡條件並且滿足的情況下的最小費用流
也就是說,有上下界的費用流只需要滿足網絡流的條件就可以了,而普通的費用流是滿足一般條件並且滿足是最大流的基礎上的最小費用

證明同 有源匯的可行流

帶有上下界的網絡流