網絡流模型整理·改

轉載請註明原文連接:http://www.cnblogs.com/LadyLex/p/7601119.html html

彷佛本身以前整理過一點點網絡流的東西網絡

可是最近看了幾道題目以後發現本身仍是太菜了數據結構

那麼讓咱們繼續整理吧!下面是我目前所學,不按期更新!ide


通用科技

拆點

若是對於點有必定的限制,或者咱們的問題中還涉及了時間,函數

咱們能夠考慮拆點來解決,好比某個點的通過次數,或者時間的分層圖,學習

或者把1個點拆成n個,用最小割來表示選擇……均可以經過拆點連邊來表示限制條件.優化

放縮

精度要求不高的實數流能夠經過放縮的方式計算,即乘以大倍率再除去idea

黑白染色

見到棋盤先來一套黑白染色冷靜一下就行了spa

棋盤題千萬不要忘記黑白染色!code

數據結構優化建圖

彷佛2-sat也能夠這麼玩

舉個最簡單的例子:若是咱們的邊是對某個區間裏面的每一個點都要聯邊,

咱們就能夠建個線段樹,向對應區間聯邊,線段樹節點之間再聯邊,

這樣就可讓邊數從$n^{2}$變成$nlogn$

先後綴優化建圖

彷佛2-sat也能夠這麼玩

在某些狀況下,可能一系列元素中只能選取一個

那在2-sat裏面,點從「x爲真/假」變成了「前x個爲真/假」

網絡流裏面也能夠相似進行操做,

咱們就不用從這個點向每一個點都聯邊了,一串inf連下去便可

inf邊/反向inf邊

這個多見於最小割/最大權閉合子圖中

咱們的inf邊能夠表明「二者只能選擇一個」,即割掉二者中的一個,

或者「選擇a必須選擇b」,而後用到最大權閉合子圖裏面

費用遞增

若是對於某條邊,其費用是關於流量的一個函數,而且知足他斜率是單調增長的,咱們就能夠拆邊,第x條費用設爲$f(x)-f(x-1)$

這樣因爲咱們跑最小費用,每次就會找最小的,流了x時就能正好計算了對應的f(x)

合併

彷佛一個不錯的建模方法是先建個暴力圖,而後看看能不能減小其中的點來優化咱們的圖

規律1. 若是幾個結點的流量的來源徹底相同,則能夠把它們合併成一個。

規律2. 若是幾個結點的流量的去向徹底相同,則能夠把它們合併成一個。

規律3. 若是從點u到點v有一條容量爲∞的邊,而且點v除了點u之外沒有別的流量來源,則能夠把這兩個結點合併成一個。

平面圖轉對偶圖

這個……我不是很會

平面圖的最小割就對應了對偶圖的最短路

轉對偶通常使用對象仍是網格圖,或者有特殊結構的圖(看題),

總之要求能夠很容易的給每一個聯通塊編號,而且能用什麼東西表明它

一開始我覺得這東西就是個狼抓兔子

最後發現事情不太對……平面圖轉對偶圖不只僅這麼簡單

因爲最短路的複雜度通常是比網絡流優秀的

因此……若是一張圖能夠轉對偶,原來的解法邊點又不少,那麼咱們不妨試試轉對偶

Hall定理

    ??????

    不會!留坑待填!

迴路限制

這種題以前見過兩道,都是很是裸的那種

通常都是說「要用迴路覆蓋整個網絡」,而後咱們限制每一個點度數必須爲2

但是……今天見了個新題

若是每一個點能夠選進迴路能夠不選,每種連邊方式有權值,而後要求最大權呢?

怎麼感受這兩個都這麼像插頭DP啊23333

考慮使用費用流,咱們固然先黑白染色

而後……咱們能夠把迴路原來的邊肯定一個方向,好比說縱向邊必須黑連白,橫向必須白連黑

這樣咱們把每一個點拆爲2點x1和x2,連$S-->x1-->x2-->T$,流量爲1費用爲0

這條x1-->x2的邊表明不選

而後咱們把原圖中有向邊對應的x1連向y2,流量1,費用爲對應費用

這樣若是有一個x1-->y2被流了,x2和y1就都須要另一個來流它

因爲咱們跑的費用流的前提是最大流,所以這樣咱們求出來的解不會存在某個點度數不合法的狀況

這樣非常妙啊……考場上沒有想到拆點處理


最大流

  有關題目:

bzoj1711 bzoj1458 bzoj3993

bzoj2095最大流求混合圖歐拉回路

這個問題的作法算一個小idea:咱們能夠用流量來表示「需求量/改變量」等值,

而後經過是否滿流來判是否存在合法分配方案


最小割

彷佛首先咱們須要一些定理……

  最大流最小割定理

    也就是說一張圖最大流等於最小割。

    感性理解一下的話……你想,最大流是小於等於割的……

    你一個最大流拍上去,S到T就已經不存在通路了……

  最小割惟一性定理

  咱們須要考慮兩個東西:一條邊可不可能在最小割中,和一條邊一不必定在最小割中

   在你跑完一遍最小割以後,在割集上的邊是必定滿流的

   咱們給殘量網絡跑tarjan縮點,若是一條邊可能在最小割中,那麼它的兩端點不在同一個聯通塊裏;

   若是一條邊必定在最小割中,那麼其(原圖上)的起點會和S在一個聯通塊裏,終點會和T在一個聯通塊裏。

經典用法

  最多見的模型是「每一個決策有多種選擇,咱們選擇其中的一個」這種問題

最小割中的「割掉」就表明了「選擇/不選擇」

這個表明選擇仍是不選擇看你最後要最大仍是最小……

若是要最大,咱們一開始先累加sum,再減去最小割

由於建圖以後若是有流量就證實存在衝突,

沒有流量的時候咱們就用最小的代價消除了全部的衝突

若是咱們要最小,那就直接流,割掉的就是選擇的

但有的時候也可能會出現有三種或者更多種狀況,咱們只能選擇其中之一

這也好說:咱們建一串點,這裏面最小的一個就會被割掉

文理分科模型

  若是點對之間的貢獻不只僅是點權,還有些附加條件(同時選,同時不選,一個選一個不選,blabla……)

咱們手動構造一下,因爲「 最小割中的「割掉」就表明了「選擇」 」

咱們就討論一下全部選擇狀況,使對應狀況下被割掉的邊流量之和等於權值

這彷佛被稱做「文理分科模型」

距離限制模型

  這是一種經典模型……因Hnoi的切糕一題得名「切糕模型」

  咱們會有每一個元素有多種選擇,相鄰兩個元素之間的選擇會相互限制

  好比切糕一題限制相鄰兩個點選擇元素的下標不超過D

  這時,咱們從每一個下標x向下標x-D連一條inf的邊

  若是相鄰兩個元素的距離超過D,那麼必然會因爲inf邊的存在而存在其餘通路,

致使咱們割掉權值更大的邊

可是切糕模型不只僅能夠這樣用

好比ctst2009的移民站選址,這題的模型就很是不錯

被稱爲切糕改23333

如今至關於每一個點有m種選擇,每種選擇有花費,

可是不一樣點(好比i,j)的不一樣選擇還會產生選擇的標號差($|pi-pj|$)*特定常數($b(i,j)$)的花費

這樣咱們把任意兩個點的相同選擇之間加上一條$b(i,j)$的雙向邊,

若是i割掉了pi,j割掉了pj,那麼這倆之間會出現$|pi-pj|$條流量爲$b(i,j)$的邊

若是最終選擇就是pi和pj,那麼這$|pi-pj$|條邊都會滿流

這樣就知足了題給模型

這樣的確是很666的,咱們經過利用最小割的性質(不存在通路),

而且利用題給條件的特色(pi-pj)來考慮一種建模的改造:爲限制距離的邊加上權值

總之挺神的……這題也不知道出題人怎麼想出來的

還有一種狀況:和最短路有關的選擇問題:即每一個點到1最短路長度不一樣不一樣有不一樣收益

這樣的話,咱們就把距離限制當作邊,對於原圖邊$u->v$,咱們轉化爲限制$|d_{u}-d{v}|<=1$

而後開始跑就好了

再來一個小問題:若是如今在網格圖上,不是限制相鄰兩個的差不超過定值,而是限制和不超過定值呢?

那麼咱們黑白染色,黑點建決策鏈從1到n,白點從n到1,這樣的話就能夠用以前差的連邊方式處理和了。

如何選擇最大的元素:

  把原來的權值x變成maxn-x,maxn爲一個大於所有x的值,

  這樣割掉的最小邊就是原來的最大值了,而後就能夠了。這樣建圖的確很巧。

如何處理損耗

  把一開始的流量設置爲收益+損耗,累加的時候只加收益

  這樣的話,咱們若是最後的決策是損耗,答案就會貢獻「收益-(收益+損耗)」= -損耗

有關題目

---over----
bzoj1001 bzoj1797 bzoj3144 bzoj3218
bzoj1497 bzoj3996 bzoj2756 bzoj2127
bzoj2039 bzoj3774
---waiting---
bzoj4519 bzoj4435 bzoj2229 bzoj3681
codeforces793G bzoj4957


最大權閉合子圖

  經典模型

最多見的最大權閉合子圖只是在最小割的基礎上用inf邊添加一些限制條件便可

有的時候,最大權閉合子圖作着作着會變成最小割

也就是說,若是咱們如今不是說「選x必須選y」,

而是「咱們能夠選z以後選y,也能夠選x以後選y」

歸納的說就是當咱們用最大權閉合子圖處理「或「的條件的時候

樸素的作法行不通了

這時候,咱們能夠考慮全部可能的狀況,而後把他們串到一塊兒跑最小割。

而且串到一塊兒的順序也是有講究的……不能串亂了

---over----

bzoj1565 bzoj4873 bzoj4501 bzoj3438

bzoj3232


費用流

序列限制問題:

  (聽說這些都是用線性規劃推出來的......我並不會)

  模型之一是k覆蓋問題,給出一些帶權區間,權值爲a要求選出一部分使得每一個數最多被k個區間覆蓋而且所選區間權值和最大

    先把序列用流量爲k的邊串起來(S->1->2->3.......->n->T這樣),這樣限制了通過次數k

    接着爲了選權值最大,咱們由每一個區間的左端點l向右端點右側(r+1)連流量爲1,權值爲ai,而後跑一個最大費用最大流便可

    因爲咱們跑的費用流創建在最大流的基礎上,所以每一個點被覆蓋的次數不會超過k次,不然就會在後續增廣時反悔

  還有一個類似的模型是每一個點有權值a,每一個長度爲m的區間最多能選k個,要求所選點權最大

    一樣把序列串起來,而後對於每一個點i向它後方第m+1個點連流量爲1,費用爲ai的邊,一樣跑一個最大費用最大流

    感性理解和上面那種建模相似,可是具體證實須要線性規劃的知識......

  好吧我在這裏寫了寫不用線性規劃的理解方式……想看能夠看一看

  其實這種模型能夠歸納爲一類」核糖體+tRNA「模型(名字我本身起的233)

  也就是說,那個長度爲m的區間就是移動的核糖體,咱們從原點放出來k個tRNA(流量),

  而後對於每個長度爲m的操做區間,每一個tRNA都只能操做一次

  這個操做的體現就是流經咱們上面加的那個跳躍的邊……而後他會跳到m個單位長度以後,那是第一個不包含它的區間

  而後在下面咱們連一溜點,流量體現了咱們對」不進行操做「的限制,即限制一段區間只能有一些tRNA不進行操做

  也就是說 咱們經過下面的流量逼着tRNA去走上面的邊

  而後大概就能夠了,這樣咱們就能跑出來對應的限制

  固然,若是咱們用線性規劃的話,咱們能夠用把等式差分的方法來解決,不在這裏討論了。

有關題目

---over----
bzoj1877 bzoj2548 bzoj3876 bzoj2324

bzoj2055 bzoj1070 bzoj4514 bzoj3171

bzoj2879 bzoj3550 bzoj1283 codechef_SEP12_PARADE


上下界

  不用說話,本身體會:http://www.cnblogs.com/liu-runda/p/6262832.html

  有關題目

---over----

bzoj3876 bzoj2055 bzoj2502 bzoj4200 bzoj4213


線性規劃與網絡流

  經典模型

線性規劃在網絡流問題中的應用非常普遍,

由於網絡流問題能夠把每一個點/每條邊的流入流出量看做變量,把最終答案看做目標函數來解決.

這一部分的知識屬於根本性的解決問題方法,掌握這種建模技巧確定比背建模套路管用

如今我暫時沒有時間去學習這方面的知識......聯賽以後這個坑必定要補上的.

我回來補坑了

線性規劃和網絡流的使用和上下界其實長得差很少……

咱們考慮,設$x_{i}$爲每一個變量是否選擇,那麼大概會有一串柿子像這樣:

$\sum x_{j}>=A_{i}$

首先咱們轉成等式…… 

$\sum x_{j}==y_{i}+A_{i}$

咱們加入2個等式$0==0$把這些等式差分

$\sum x_{j}-\sum x_{k}==y_{i}+A_{i}-y_{i+1}-A_{i+1}$

$\sum x_{j}-\sum x_{k}+y_{i+1}-y_{i}+A_{i+1}-A_{i}==0$

而後……這個柿子的本質是流量平衡,減(-)表明流出,加(+)表明流入

咱們發現這個東西就是一堆常數項加上一堆變量對吧

而後對於全部的元素 咱們都知足一個原則:入正出負

若是兩個柿子有相同的變量,那麼從負的那個(出)向正的那個(入)連邊(輔助變量也算,連inf)

而後若是一個常量x是正的,就由s向它連x;不然它向t連-x

如今咱們至關於要求一個可行流

對於常量,咱們創建附加源點和匯點,依然遵循入正出負連邊

有一種不用動腦子的記憶方法是移項到每一個前面都是正的,而後一側有變量表明出邊,一側表明入邊

而後對於附加源匯跑你想跑的流………

上面費用流那個序列限制建模也能夠用線性規劃來理解

有關題目

  ---over----
  bzoj1061 bzoj4842


不清楚分類的題目:

bzoj2095 bzoj4213 bzoj4067

loj6045 loj2006 loj536 bzoj2229

uoj217 uoj168 uoj77 bzoj2597

相關文章
相關標籤/搜索