有關網絡流


有關網絡流

1. 關於模板

  • 最大流一般Dinic就解決掉了
  • 費用流的話,一般EK都能搞出來,然后如果被卡了的話,就寫一個類似Dinic的東西就好了,基本沒啥變化,自己YY一下就想出來了

2. 關於最大流

普通最大流

似乎沒啥題,我見過的都是裸題

有關最小割

關於最小割的東西還是不少的,那么從頭開始說

  1. 直接最小割

    這個東西一般都不是網絡流題,但是通常網絡流可以爆踩std...

    例子的話:BZOJ1001 狼抓兔子 NOI2010 海拔

  2. 一起選一些點會發生一些事情

    這種東西一般考新建一個虛點,然后把代價從原來的點連向這個點,然后向其他的點連流量為正無窮的邊

    1. BZOJ 3894 文理分科

      上述問題的裸題,直接按照上述方式建圖然后最小割即可

    2. BZOJ 3774 最優選擇

      先黑白染色,然后白黑分別連向源匯,流量為$a[i][j]$,然后對於每個點新建一個點,然后,對於白點新建一個點,把白點連向這個點流量為$b[i][j]$,對於黑點也新建一個點,然后把這個點連向黑點,流量為$b[i][j]$,然后對於每個新建的點,然后把這個點連向四周的點或者從四周連向這個點即可。

    3. BZOJ 2400 Optimal Marks

      先拆位,因為每位之間的貢獻是互不影響的,然后對於每個有數字的節點,分為$0,1$,然后$S -> 0$,流量為$\infty$,$1 - > T$流量為$\infty$,剩下的對於原圖中每一個邊練一下流量為$1$的邊即可。這樣的最小割即為第一問的答案,然后因為流是確定的,所以貪心的找到必須為$1$的點的個數第二問就解決了

    4. BZOJ 3144 HNOI2013 切糕

      如果沒有限制的話,顯然可以建圖,從底向上,多建出一層點,然后每條邊的流量就是對應層的代價即可,然后加入$d$的限制之后,就只需要把每個點連向旁邊的深度比它大$d$的點,流量為$\infty$,道理很簡單,這樣如果$i$層的邊被割了,那么就從這一層的$i+1$位置走到旁邊的$i+1+d$的位置,然后並且會從$i-d$回到$i$這個位置,如果不在這個區間內割開的話,原圖就還是聯通的。

    5. BZOJ 3218 a+b problem

      先把$S - > i$,流量為$b[i]$,然后把$i - > T$流量為$w[i]$,對於奇怪的方格的限制可以新建一個點,並把$i$指向這個點,流量為$p[i]$,然后再把這個點指向可能會導致這個點奇怪的點即可,流量顯然為$\infty$。

  3. 最小割樹

    咕咕咕

最大流常見建圖方式

  1. 混合圖歐拉回路

    隨意欽定無向邊方向,由於歐拉回路要求每個點的入度等於出度,並且入讀+出度為偶數

    所以對於每個點,$S- > i$連一條出度流量的邊,$i-> T$連一條入度流量的邊,然后對於原圖中的每一條無向邊,由於可以反悔,所以假設你欽定了是$x->y$,連一條$x-> y$,流量為$2$的邊即可,原因很簡單,因為可以反悔,所以對於每個點如果出度較多,就需要把某一些出邊變成入邊,反之就需要把某一些入邊變成出邊,每次會讓出邊-入邊的差減少$2$。

  2. 最大權閉合子圖

    將每個點權分正負,對於正點,$S->i$,流量為$a_i$,對於負邊,$i->T$,流量為$-a_i$

    對於原圖中的每一條邊,$x->y$連一條流量為正無窮的邊,然后正權邊的和-最大流即為答案

  3. 最大密度子圖

    通過01分數規划,我們二分每個點的代價,然后對於這個代價建立最大權閉合子圖即可。

    每次驗證最大權閉合子圖是否為$0$即可

3. 關於費用流

普通費用流

一般這種題,費用流都不是正解,或者正解需要優化建圖方式,這種題的費用流模型十分簡單,並且費用流部分不作為考點存在

其中一部分是可以通過貪心+數據結構優化到$O(n\log n )$或者$O(n \log ^2 n)$

另一部分則是同樣通過數據結構或者其他的什么東西優化邊數來優化復雜度

詳情見:

常見費用流模型

  1. 最小等待時間問題

    一般的解決方案是拆點

    1. BZOJ 1070 修車

      這個題是這種題的一個常見形式,把$m$個人拆成$n$個點

      對於第$i$個人的第$k$個點,把這個人向第$j$個車連一條流量為$1$,費用為$map[j][k]\times i$

      這個道路很簡單,表達的意義就是第$i$個人,倒數第$k$個修$j$這個車

      然后$S$向所有人連邊,所有車向$T$連邊

    2. BZOJ 2879 美食節

      和修車大概啥區別都沒有,就是需要動態開點...

  2. 費用流拆邊

    一般解決的問題長成,最小化$(x)^2$其中$(x)$是一個式子,然后可以通過建出$n$條費用不同的邊來解決

    BZOJ 2597 WC2007 石頭剪刀布

    先把問題轉化為,求三個點不構成環的方案數

    然后可以發現,對於這樣的方案一定滿足其中有兩個點是指向同一個點

    那么也就是$C(n,3)-\sum\limits_{i=1}^nC(d[i],2)$

    然后最小化后者,轉化為求最小化:$\sum\limits_{i=1}^n d[i]^2 - d[i]$

    可以發現后面的$d[i]$的和是固定的,也就是$\sum\limits_{i=1}^n i=\frac{n\times (n-1)}{2}$

    那么就是最小化$\sum\limits_{i=1}nd[i]2$,對每個點拆邊,費用分別為$1,3,5,7...$

  3. 線性規划轉費用流

    “事實上任何最大流,最小費用流,上下界網絡流都是在解決一個線性規划問題”(摘自 wyfcyx 大爺的ppt)

    具體地,在一個網絡流問題中,把邊看作變量,把點看作限制條件,就會得到一個線性規划問題。

    當然,由於網絡流的特性,這類線性規划問題只能是:每個變量出現次數為且僅為$2$次,且$1$次系數為$+1$,$1$次系數為$-1$。

    如果我們能夠將這類特殊的線性規划問題轉化為網絡流問題,就可以圓滿地解決原問題。

    BZOJ1061: [Noi2008]志願者招募

    我們設:第$i$天招募的志願者數量為$P_i$,$j$種志願者招募了$k_j$個

    那么對於$P_i = P_{i-1}+ \sum\limits_{S_j=i} k_j - \sum\limits_{T_j=i-1}k_j $

    我們要滿足:$P_i \ge A_i$,所以我們設$B_i $為一個自然數,即:$P_i = A_i+B_i$

    那么我們可以得到:$P_i - P_{i-1} = A_i + B_i - A_{i-1} - B_{i-1}$

    將$P_i = P_{i-1}+ \sum\limits_{S_j=i} k_j - \sum\limits_{T_j=i-1}k_j $帶入上式可得:

    $\sum\limits_{S_j=i} k_j - \sum\limits_{T_j = i-1}k_j = A_i +B_i -A_{i-1}-B_{i-1}$

    那么:$A_i+B_i + \sum\limits_{T_j =i-1}k_j = A_{i-1}+B_{i-1} + \sum\limits_{S_j=i}k_j $

    那么對於這樣的一個式子,我們發現,如果把招募$k$個志願者看作流出流量,到期看作在下一天流入流量,同時把前一天看作是流出流量,當天所需看作是流入流量,然后再把這天多余的當作流出流量,然后把下一天的多余流量流入今天。

    這樣如果每個點都流量平衡就滿足要求了,那么就按照上述東西跑一個費用流就好了。

4. 關於有上下界網絡流

對於這種類似問題,如果原圖有源匯,那么就把匯向源連一條當前網絡能夠允許的最大流量的邊,然后剩下的就轉化為無源匯問題了。

然后做題的技巧是,先建出對應的可行流模型

然后再可行流的模型上構建真正需要的模型

一般可以把連邊的流量寫成不等式或者等式的形式

有上下界可行流

對於這種問題,我們可以轉化為類似於混合圖歐拉回路的方法解決。

也就是,我們將每條邊先欽定都流下界那么多的流量,然后有些點可能就會流量不平衡

這個時候,我們將$S->i$如果流入>流出,並且流量為流入$-$流出,反之,我們將$i->T$,流量為流出$-$流入

然后對於原圖中的每一條邊,因為每條邊可以在上屆與下界之間反悔,如果多流的話,代表着起始點的流入增加,終止點的流出增加,那么如果能夠通過調整當前圖的流量滿足流量平衡,那么就可以,反之就不可以。

有上下界最大流

似乎沒啥營養?

一般問題都包含源匯,然后就可以把新建的源匯去掉,把匯向源的邊去掉。

然后在殘余網絡上跑原圖源匯直接的最大流即可

(其實這個有上下界一點意義都沒有,這個本質上就是轉化成了有上下界可行流判斷可行性+如果可行,答案一定為原圖最大流

有上下界最小流

和上面的求法一樣,不過跑的是匯到源的最大流

然后可行流的流量減去這個流量就是最小流

有上下界最小費用可行流

直接用可行流模型邊加上費用跑費用流就行

5. 一些習題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM