演算法學習 上下界網路流

2022-04-29 22:36:09 字數 1046 閱讀 2373

顧名思義,帶上下限網路流即對於網路流中的每一條邊,都帶有流量的上界和下界。

普通的網路流可以看做下界為0的上下限網路流。

1,無源匯帶上下界可行流。

定義乙個陣列d[x]表示圖中點x的入度下限和-出度下限和。

建圖方式為:

對於圖中每一條邊,都連流量為上界-下界的邊,並在加邊的時候統計d[x]。

對於任意乙個點,如果它的d[x] > 0,那麼連s --- > x, 流量為d[x];

如果它的d[x] < 0, 那麼連x --- > t, 流浪為-d[x]。

然後直接從s到t跑網路流即可,如果滿流即為合法,否則不合法。

如何理解?

因為下界是必須達到的,因此先把所有的邊都強行達到下界。

對於任意乙個點,如果d[x] > 0, 那麼表示進來的流量有剩餘,還沒有流完,因此從s給它補充d[x]的流量。

反之,如果d[x] < 0, 那麼表示進來的流量不夠,所以連向t以讓它可以接收流量來補足不夠的-d[x]的流量。

如果滿流,那麼代表剩餘的流量可以恰好補全不夠的流量,那麼就是可行了。

同時因為每條邊都變為了上界-下界,因此不管怎麼流,都是不會超過上界的,於是就成功的把流量限制在了[下界,上界].

2,有源匯帶上下界可行流。

建圖方式與上述相同,只是把原來的源匯連一條t --- > s : inf的邊(現在的超級源匯為ss, tt)

3,有源匯帶上下界最大流。

先做一遍可行流,然後去掉ss和tt,在殘餘網路上跑最大流,最大流即為答案。

因為有反向邊,所以之前可行流流出的流量會從反向邊流到t,於是基礎流量就會被滿足了,然後就是在這個基礎上增添流量。

又因為是最大流,所以跑出來的肯定是最優解。

4,有源匯帶上下界費用流

建圖方式和網路流差不多,原圖上的邊費用不變,新增的邊費用為0.一開始減掉下界的時候要加上流下界的費用。

最後和跑出的費用相加,得到最後的費用。

上下界網路流學習小計

有上下界的網路流。網路流有了建圖,其他都是浮雲。設立超級源ss和超級匯tt,原來的s和t還是有的。上下界網路流的建圖最好感性的理解,因為證明很複雜,就當做黑盒演算法。t向s連一條容量為 的邊。有一條u連向v的邊,下線為l,上限為r,那麼我們從s到u連 的邊,v到t連 的邊,從u到v連一條r l的邊。...

上下界網路流學習筆記

一些點,一堆邊,每條邊要滿足流量限制 l,r 先令每條邊流量等於流量下限,得到初始流,初始流可能不滿足流量守恆,再建出殘量網路 上限 下限 求出可能不滿足流量守恆的附加流,使附加流和初始流合併後滿足流量守恆 定義 a i 表示初始流中流入量 流出量 若 a i 0 表示流入量大於流出量,附加量需要流...

上下界網路流初探

看文章各種不明真相.請教了一下iwtwiioi大牛.大致有個理解.建模過程 1.拆邊.對於每一條給出的有向邊 u,v,c,d 其中c指下界,d指上界,那麼在實際的圖中連三條只有上界沒有下界的邊 s,v,c u,t,c u,v,d c 其中s是超級源,t是超級匯.不同於題目給出的源與匯 一條是超級源連...