網路流問題總結

2021-10-01 07:08:08 字數 1943 閱讀 6227

這種一般遇到得比較少,除非是板題

這種問題一般是把全集分為兩類數,求分開這個集合(或是選出某個子集)的最小代價是多少。

有關技巧:

利用容量為inf的邊來干涉決策,如最大權閉合子圖

將所選集合的點的鄰接邊權求和分析,如最大密度子圖

判定s,t集合時必須用dfs

分數規劃

易錯點:

cnt初始時沒有賦為1(很容易浪費時間)

在寫gap優化時一定要單獨註明總點數sz

總點數計算容易算錯(想的和寫的不一致,編號和實際使用點數不匹配)

注意加的是單向邊還是雙向邊

全域性最小割一般比較明顯(其實最小割樹也比較明顯)

但有一些基於最小割樹的構造問題會比較麻煩

在解決這些問題時一定要抓住最小割的性質

如:c(u,v)>=min(c(u,w1),c(w1,w2),c(w2,w3)...,c(wn,v))

其他的都了解即可

邊分治等樹上演算法(其實暴力也是可以的,反正點數已經在很小的範圍了)

網路流中最麻煩的東西

1、無源匯的上下界可行流

我們先有乙個想法,把所有的上下界為 [l,r] 邊(u,v)拆成 l 和 r-l 的兩條邊(u,v)      (注意都是有向邊)

l 是我們的必須邊,於是我們可以把它拆成兩半,插在乙個tmp池子中,即把 l (u,v)拆成 l (u,tmp)和 l (tmp,v)

如果我們保證這兩條邊都是滿流的,就說明了這個問題是可解的

我們可以繼續把池子tmp也拆成兩個池子s和t,必須邊 l (u,v)就變成了 l (s,v)和 l (u,t)

這時,我們從s到t做乙個最大流(注意,此時的非必須邊 r-l (u,v)是一直存在的),如果s的所有出邊和t的所有入邊都滿流了,就說明了所有的必須邊都是可以通過非必須邊轉移一些流量而達到滿流,即找到了乙個可行解

否則就無解

2、有源匯的上下界最大流

先把原圖的源匯點s,t之間連一條 inf (t,s)的邊,讓它們構成乙個迴圈流,重複 1 的步驟,即可得到乙個可行解

此時拆掉新增的s、t與其相連的邊和新增的 inf (t,s)邊

再從原圖(此時已經是殘餘網路)的s,t做乙個最大流

答案=第一次最大流完成後inf(t,s)邊流過的流量+第二次的最大流流量

3、有源匯的上下界最小可行流

先直接做一次1,跑一次最大流,然後連上inf(t,s)再跑一次最大流,答案為第二次最大流後inf(t,s)邊的容量

注意每次s,t最大流之後都要判斷無解的情況!!!!

有一些矩陣有關的題目,可能會用到上下界網路流

費用流最重要的就是 把 流的過程 看作 對題意過程的模擬

於是就出現了很多巧妙的費用流模型

但這些模型都不太具有一般性,所有也不方便總結,只有考場上現推

關於上下界最小費用可行流

其實就是和上下界最小費用流差不多,只不過先把必須邊的費用計算了,再把非必須邊附上費用跑最小費用流。

提供一些通用的思路:

1、最大流最小割求最大利潤,除了可以最大權閉合子圖以外,還有一些非普遍的模型需要現場分析:

怎麼分析?關鍵是找到題目中的矛盾關係,比如選擇兩個方案的一種來獲得利潤(兩種方案的關係為 或 )

就可以把這樣建模:---方案1代價--->---利潤(可以是inf,即兩種代價必須付出至少一種)--->---方案2代價--->   (可能還要一些inf的邊來構建利潤之間的關係)

2、黑白染色:網格選點問題常用

3、費用流問題,可以先假設已經完成分配的代價,再來在預設代價上用費用流更新。

網路流總結

今天學的網路流,總的感覺來說稍難,不管是理解還是什麼,但是理解了後,就變得簡單許多。ford fulkerson演算法 是來求最大流量問題,從源點出發,到匯點,到底能多少能流入匯點。演算法 1 從源點出發,找相鄰邊,如果相鄰邊未被找過並且還可以流入流量就dfs。2 更新流入的邊。3 重複操作,直到沒...

網路流總結

今天做了一天的網路流,也發現了很多有趣 有毒 的建圖方法,也算是收穫很多了,這裡就做個總結吧。網路流跑的方法大家都會我就不說了,題考察的重點也就是建圖。建圖就涉及到2個方面 1.建點。建點其實就是網路流的難點了,一般點弄好了邊也容易了。建點的困難就在於有時要拆點,我總結了一下拆點主要是這幾個作用 a...

網路流總結

1.hdu1532 給網路圖,求1 n的最大流.注意邊數 2 2.hdu3572 經典建圖模型,有些東西能轉換為容量考慮 網路流演算法.dinic學了乙個多路增廣優化,能少一次遞迴的時間 1.hdu1533 建圖方式,假設有cntm個人,cnth個房子,分別對應編號 1,cntm cntm 1,cn...