日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

有上下界网络流问题汇总

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有上下界网络流问题汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

無源匯有上下界可行流

法一(據說適合點少邊多的圖):

建圖方法

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

    法二(據說適合點多邊少的圖):

    建圖方法

    • 首先建立一個源點ss和一個匯點tt,一般稱為附加源和附加匯。
    • 對于圖中的每條弧<u,v>,假設它容量上界為c,下界b,那么把這條邊拆為三條只有上界的弧。
  • 一條為<ss,v>,容量為b;
  • 一條為<u,tt>,容量為b;
  • 一條為<u,v>,容量為c?b。
  • (其中前兩條弧一般稱為附加弧。)

    求解方法

    • 以ss為源點,以tt為匯點,對這張圖跑最大流。
    • 如果所有的附加弧都滿流,則原圖有可行流。
    • 這時,每條非附加弧的流量加上它的容量下界,就是原圖中這條弧應該有的流量。

    理解方法

    對于原圖中的每條弧,我們把c?b稱為它的自由流量,意思就是只要它流滿了下界,這些流多少都沒問題。

    既然如此,對于每條弧<u,v>,我們強制給v提供b單位的流量,并且強制從u那里拿走b單位的流量,這一步對應著兩條附加弧。

    如果這一系列強制操作能完成的話,也就是有一組可行流了。

    注意:這張圖的最大流只是對應著原圖的一組可行流,而不是原圖的最大或最小流。

    有源匯有上下界可行流

    建圖方法

    • 在原圖中添加一條邊t->s,流量為inf
    • 其余建圖方法與無源匯有上下界可行流相同

    求解方法

    • 同無源匯有上下界可行流
    • 弧<t,s>的流量就是原圖的總流量

    理解方法

    有源匯相比無源匯的不同就在于,源和匯是不滿足流量平衡的,那么連接<t,s>之后,源和匯也滿足了流量平衡,就可以直接按照無源匯的方式建模。

    注意:這張圖的最大流只是對應著原圖的一組可行流,而不是原圖的最大或最小流。

    有源匯有上下界最大流

    建圖方法

    • 同有源匯有上下界可行流

    求解方法

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

    理解方法

    為什么要在已經有了流量的圖上跑最大流?因為那張圖保證了每條弧的容量下界,在這張圖上跑最大流,實際上就是在容量下界全部滿足的前提下盡量多得獲得“自由流量”。

    有源匯有上下界最小流

    建圖方法(常用的一種)

    • 按照有源匯可行流的方法建圖,但是不要建立<t,s>這條弧

    求解方法

    • 求ss->tt最大流
    • 連邊t->s,inf
    • 求ss->tt最大流
    • 若滿流,則存在可行流,答案即為邊t->s,inf的實際流量

    理解方法

    在跑完有源匯可行流之后,弧<t,s>的流量就是原圖的流量。

    第一遍做的時候并無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的最小費用最大流
    • 答案即為(求出的費用+原圖中邊的下界*邊的費用)

    法二(據說適合點多邊少的圖):

    建圖方法

    • 首先建立附加源ss和附加匯tt。
    • 對于圖中的每條弧<u,v>,假設它容量上界為c,下界b,費用為cost那么把這條邊拆為三條只有上界的弧。
  • 一條為<ss,v>,容量為b,費用為0;
  • 一條為<u,tt>,容量為b,費用為0;
  • 一條為<u,v>,容量為c?b,費用為cost。
  • 求解方法

    • 跑從ss到tt的費用流
    • 答案即為(求出的費用+原圖中邊的下界*邊的費用)

    總結

    以上是生活随笔為你收集整理的有上下界网络流问题汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。