網絡流學習筆記
網絡流學習筆記
最近幾天都在學雖然不知道有什麽用
但還是在這裏做一個總結.
再立一些奇怪的flag
一.網絡流的有關算法
1.最大流
主要是EK和Dinic.(什麽ISAP,HLLP就沒學了,卡Dinic的是毒瘤)
感覺EK沒什麽用啊,跑得慢.還是Dinic好,跑得快,還好理解.
我打Dinic一般就是多路增廣+當前弧優化.
一遍bfs構出分層圖,然後跑多路增廣.
2.費用流
我只會EK費用流.
把EK中的bfs找隨機一條增廣路改成spfa找費用最小增廣路即可.
3.應用
二分圖.
雖然說網絡流不一定要學二分圖,但學了二分圖將有助於網絡流一些題目的理解.
二分圖的最大匹配=最大流(吊打匈牙利)
二分圖帶權最大匹配=費用流(吊打KM)
二.一點套路
1.二分圖多重匹配
這個很簡單,改一下容量限制即可.有很多模板題
2.拆點
這個比較重要.
如果一個題目中一個元素有兩種"身份"(這個在後面的題目會有說明),那麽可以考慮將它的兩個身份分別丟到二分圖的左部圖與右部圖中,那麽這個元素與其他元素之間的關系就可以用互相之間的連邊來描繪.
三.題目
不多說了,網絡流與線性規劃24題是你的最佳選擇.
鏈接
[x] 飛行員配對方案問題
[x] 負載平衡問題
[x] 軟件補丁問題
[ ] 孤島營救問題
[x] 魔術球問題
[ ] 汽車加油行駛問題
[x] 圓桌問題
[x] 試題庫問題
[x] 最小路徑覆蓋問題
[x] 分配問題
[ ] 太空飛行計劃問題
[ ] 運輸問題
[ ] 方格取數問題
[ ] 最長不下降子序列問題
[ ] 最長k可重區間集問題
[ ] 最長k可重線段集問題
[ ] 深海機器人問題
[ ] 騎士共存問題
[ ] 餐巾計劃問題
[ ] 火星探險問題
[ ] 數字梯形問題
[ ] 航空路線問題
[ ] CTSC1999家園
[ ] 機器人路徑規劃問題
1.飛行員:
二分圖最大匹配模板.
2.負載平衡
拿貪心水的,網絡流做法暫時沒看.
3.軟件補丁
不是網絡流.
直接狀壓+最短路.
4.孤島營救
沒寫,應該是狀壓+bfs
5.魔術球
對我而言第一道正式的網絡流的題目.
思路是枚舉放到第幾個球,那麽對於每一個新進來的球,有兩種決策,放到前面或者新開一根柱子.
有一個貪心要想到,那就是能不開柱子就不開柱子.
那麽如何跟網絡流扯上關系呢?
繼續之前的思路,來了個球,我可能把它放到之前的許多球上,使得他們的和為完全平方數.
但是我既不知道前面球的放置方案,也不清楚將當前球放到前面的球上會有什麽影響.
只是知道它與前面的一些球有可能性相連.
既然跟圖論有關,我們可以很自然地將這種可能關系轉化為它們之間有一條連邊(有向邊,僅從小連到大),並且還要限制一個點在最終的決策中只與一個而不是多個點連邊,因為每個球上面只會有一個球.
又由於我們連邊是有順序的,所以這張圖是一個DAG.
那麽一根柱子既體現為這個DAG上的一條鏈.
所以題目轉化為在一個DAG上用固定條數的鏈在節點不重復的情況下最多能覆蓋多少個點.
為了使問題簡化,我們不妨考慮用最少鏈覆蓋固定點數.
那麽每一條這樣的鏈,除了端點外,每個點都有一條入邊與出邊.
反正你就要想到這是可以拆點,用網絡流的,那麽每一個點都有兩個身份,它既是入邊的中點,也是出邊的起點.
把這個點分別拆到左部圖與右部圖.左邊的它會有若幹條出邊指向右部圖的其他點,右邊的它會被若幹條來自左部圖的點指向.
那麽鏈最少意味著被選入鏈中的邊盡可能的多,在二分圖上則對應著左右兩部圖之間的連邊盡可能的多.
又每個邊只能選一次,所以就是二分圖上的最大匹配了.
6.汽車加油行駛問題
沒做.
7.圓桌問題
多重匹配...太板子了.
別把n,m看反/搞混就ok.
8.試題庫
還是多重匹配板子
9.最小路徑覆蓋
在魔術球裏面講的很詳細了,這裏不多說.
10.分配問題
費用流板子.
(補坑)
網絡流學習筆記