有關網絡流

有關網絡流

1. 關於模板

  • 最大流通常Dinic就解決掉了
  • 費用流的話,通常EK都能搞出來,而後若是被卡了的話,就寫一個相似Dinic的東西就行了,基本沒啥變化,本身YY一下就想出來了

2. 關於最大流

普通最大流

彷佛沒啥題,我見過的都是裸題php

有關最小割

關於最小割的東西仍是很多的,那麼從頭開始說網絡

  1. 直接最小割數據結構

    這個東西通常都不是網絡流題,可是一般網絡流能夠爆踩std...優化

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

  2. 一塊兒選一些點會發生一些事情it

    這種東西通常考新建一個虛點,而後把代價從原來的點連向這個點,而後向其餘的點連流量爲正無窮的邊模板

    1. BZOJ 3894 文理分科變量

      上述問題的裸題,直接按照上述方式建圖而後最小割便可技巧

    2. BZOJ 3774 最優選擇map

      先黑白染色,而後白黑分別連向源匯,流量爲$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. 一些習題

相關文章
相關標籤/搜索