有上下界的網路流
這幾天看了周源的《
一種簡易的方法求解流量有上下界的網路中網路流問題
》,並完成了
sgu 194
&zoj 2314
reactor cooling,
sgu 176 flow construction
和hoj 2135
&poj 2396
budget三道題。
作為周源文章中提到的求解上下界網路的最小流和最大流問題中的入門題就是reactor cooling這道求解無源匯網路的可行流,且在這個網路中,需要滿足b(u, v) <= f(u, v) <= c(u, v)這個條件,即這個無源匯的網路流量帶有上下界的約束。
設f(u, v ) = b(u, v) + g(u, v ) (*),顯然0 <= g(u, v ) <= c(u, v) - b(u, v)。將(*)代入流量平衡條件中,則得到∑[b(u, i) + g(u, i)] = ∑[ b(i, v) + g(i, v)] => ∑g(i, v) - ∑g(u, i) = ∑b(u, i) - ∑b(i, v)。如果設m(i) = ∑b(u, i) - ∑b(i, v),即m(i)為流入結點i的下界總和減去流出i的下界總和。
至此,可如此構造乙個只有流量上界的附加網路:增加附加源s'和附加匯t',原網路中m(i)非負,則c'(s', i) = m(i),否則c'(i, t') = -m(i);原網路中任意有弧相連的結點u和結點v在附加網路中的弧c'(u, v) = c(u, v) - b(u, v)。
這樣,如果附加網路滿流,則在原網路中就存在乙個與之對應的可行流。而想判斷附加網路能否滿流可通過求解附加網路的最大流進行判斷。如果滿流,則有解;否則無解。
這個問題弄明白後,就可以進行下一步的求解有上下界網路中的最大流和最小流問題了。
增加一條弧(t, s),使原網路變成乙個無源匯的網路。如果求最大流,則b(t, s) = a,c(t, s) = inf;如果求解最小流,則b(t, s) = 0,c(t, s) = a。可以通過二分法列舉a,按上文提到的方法構造附加網路,判斷附加網路中是否有可行流即可。最終,a即為所求。
這種方法實現起來較為簡單,所需的代價是多次求解最大流。複雜度為o(logf maxflow(v, e))。
有上下界網路流
前言 下面寫得只是一些十分基礎的東西,是給我以後自己看的,想要徹底弄明白這個內容,推薦去看liu runda。注 為了方便,下面所有的 x,y,l,r 都表示一條從x連向y,流量下界為l,流量上界為r的邊。問題簡述 給出乙個有向圖,每條邊有流量上下界,沒有源點和匯點,要求找到一種流的方法,使得每個點...
有上下界的網路流
1.無匯源有上下界最大流 以前寫的最大流預設的下界為0,而這裡的下界卻不為0,所以我們要進行再構造讓每條邊的下界為0,這樣做是為了方便處理。對於每根管子有乙個上界容量up和乙個下界容量low,我們讓這根管子的容量下界變為0,上界為up low。可是這樣做了的話流量就不守恆了,為了再次滿足流量守恆,即...
有上下界的網路流
有上下界的網路流請戳這裡 hzwer.com 首先s向每天連 0,day 的邊,每一天與拍照的妹子連 l,r 的邊,每個女孩和匯連 g,oo 的邊 對於有源和匯的上下界網路流,只要t到s連一條 0,inf 的邊,那麼原圖成為乙個無源點匯點的迴圈流圖,那麼新建ss和tt,向每個點連邊 即每一點的入流為...