网络流(17/24)
19.10.14馬上YC了,感覺自己看到簡單網絡流題,都不敢以信心滿滿穩切的心態去看題。
題目均來自洛谷網絡流24題。
題目列表:這里。
具體復雜度依照具體情況
- 最大流=最小割
- 二分圖最大匹配=最大流
- 二分圖的最小點覆蓋數=該二分圖的最大匹配數(最小點權覆蓋集==最小割)
- 二分圖的最小邊覆蓋數=圖中的頂點數-(最小點覆蓋數)該二分圖的最大匹配數
- 二分圖的最大點權獨立集=總權-最小點權覆蓋集(總點數-匹配數)
- DAG最小無相交路徑覆蓋=原圖的結點數-新圖(拆點變成二分圖)的最大匹配數(如果求相交,那么floyd求出所有閉包,轉換為無相交)
- 最大權閉合子圖=正權值之和-最小割
以下S為源點,T為匯點。
P2756 飛行員配對方案問題 //二分圖匹配
二分圖匹配板子,跑完后,看看matchmatchmatch的值就好了。
P4016 負載平衡問題 //費用流
把大于平均值的放左邊,小于平均值的放右邊。
左邊右邊根據要轉移的數量拆點限流,費用為0。
左向右連邊費用為min(順時針,逆時針),min(順時針,逆時針),min(順時針,逆時針),容量為無窮大。
在連上S和T。
P2763 試題庫問題 //最大流
把種類到題目連起來流量為1,
題目到T流量為1,
S到種類流量為需要的題數。
跑最大流后看種類結點的出邊的capcapcap有沒有被用掉就好(注意有到S的反向邊)。
P4014 分配問題 //費用流
人到工作流量為1費用為Ci,jC_{i,j}Ci,j?,S到人流量為1費用為0,工作到T流量為1費用為0,可以求最小。
將費用取相反數,就可以求最大
P4015 運輸問題 //費用流
倉庫到商店連接起來容量infinfinf,倉庫和商店拆點限流(或者直接通過連接源點匯點限流
P2765 魔術球問題 //二分圖匹配(最小路徑覆蓋
這題難度+++
假設現在有xxx個點,如果兩個點可以相加是平方數,那么小的向大的引一條邊。
問題就轉換成了求DAG最小無相交路徑覆蓋(拆點二分匹配)。
DAG最小無相交路徑覆蓋ZZZ:一個點拆成入點和出點,求最大二分圖匹配數,ZZZ=頂點數-匹配數。
對于此題,可以二分,可以暴力逐個加點。
最后輸出的時候,因為當前網絡流里已經把DAG分割成了nnn份,那么在DAG上面走,每次看網絡流里cap是否為零(是夠有匹配到),然后不停跳到匹配到的點。
其實用HA算法也OK的。
P2764 最小路徑覆蓋問題
模板題,上一題K過了,這題就是順手…
P3358 最長k可重區間集問題//費用流處理區間
這題思路巧啊。
大致知道是費用流。
考慮將區間端點離散化,然后從小到大連成一條線LLL。
在LLL的前兩個點間限流kkk,其他可以不限流。
對于每一個開區間,id[l]id[l]id[l]到id[r]id[r]id[r]費用為?(r?l)-(r-l)?(r?l)容量為1。
最后跑min_cost_flow(L起點,L終點)min\_cost\_flow(L起點,L終點)min_cost_flow(L起點,L終點)。
保證kkk大小的流,且保證區間要么全取,要么一點都不取。
P3357 最長k可重線段集問題 //費用流處理區間
這題和上一題不一樣的地方就是會有垂直于xxx軸的點,那么就會產生自環,那么這里考慮拆點。
拆成入點和出點,對于垂直于xxx的線段,入點到出點容量為1費用為長度,其他的都是出點到入點。
(得考慮建圖符合實際情況
P4011 孤島營救問題 //bfs+狀壓
原本的意思是:分層圖+最短路
BFS狀壓爆搜復雜度好像還低一點。(貪心撿所有鑰匙)O(n?m?(1<<s))O(n*m*(1<<s))O(n?m?(1<<s))
P3254 圓桌問題 //最大流
隊伍和餐桌限流,然后構建完全二分圖,跑完后看所有隊伍到餐桌的capcapcap就行了
P4009 汽車加油行駛問題 //分層最短路
bfsbfsbfs復雜度會爆炸,考慮分層建圖然后跑dijkstradijkstradijkstra,分成kkk層(1?n?n,n?n+1?n?n?2...1-n*n,n*n+1-n*n*2...1?n?n,n?n+1?n?n?2...
每一層的層數表示當前的油量,暴力建圖,連一個源點匯點跑最短路。
復雜度O(n?n?k?log(n?n?k))O(n*n*k*log(n*n*k))O(n?n?k?log(n?n?k))
P2762 太空飛行計劃問題 //最大權閉合子圖
考慮 將所有與實驗對應的儀器向實驗引一條邊,構成一張DAG
那么答案就是最大權閉合子圖。
考慮用最小割求最大權閉合子圖:
S到每個正權點容量為權值,每個負權點到T容量為權值的絕對值,有向圖原來的邊容量全部為無限大,然后求最大流。
然后所有正權值的和-最小割就是答案(正權點-不要的正權點-要的負權點)。詳細見這里
最后輸出的時候,看是否和S聯通即可,如果和S聯通(存在流量>0的路徑),說明是要做的實驗和遺棄。
P2774 方格取數問題 //最大點權獨立集
可以發現把所有點分成二分圖。(所有回路都是偶數
發現這題求的就是二分圖最大點權獨立集(任意兩點不相鄰)= 點權和 - 最小點權覆蓋(最大匹配)(最小割)
假設全都取,再去掉最小割(使得沒有聯通)
P2766 最長不下降子序列問題//最大流
第一問:暴力lislislis
第二問:根據dpdpdp方程,從dp[i]==1dp[i]==1dp[i]==1的點作為源點,dp[i]==sdp[i]==sdp[i]==s的點作為匯點,對于每一個點拆點限流(保證只用一次。
根據轉移方程,對于dp[i]+1==dp[j]∩a[i]<=a[j]dp[i]+1==dp[j]∩a[i]<=a[j]dp[i]+1==dp[j]∩a[i]<=a[j]的,引i+ni+ni+n到jjj容量為1的邊,這樣就保證到dp[i]==sdp[i]==sdp[i]==s的點長度是sss。
第三問:放掉對點的限流(多加一條邊,再找殘余網絡)
P4012 深海機器人問題
這里是邊上只能用一次(我想當然的考慮把邊看成點,然后拆點限流,給我寫?了)
邊上只能用一次,那么將點連起來限流就好了…
最后對于出發和結束點連源點匯點限流。
P3355 騎士共存問題 //最大點權獨立集
和方格取數差不多,這里求的也是最大獨立集。
這里先建圖(相互攻擊的連邊)。
可以發現所有攻擊回路都需要轉折偶數次,那么這是一個二分圖。
最大獨立集=點數-二分圖匹配數。
進行二分染色,然后建最大流。
或者直接HA二分匹配。
答案就是n?n?m?匹配數n*n-m-匹配數n?n?m?匹配數
總結
以上是生活随笔為你收集整理的网络流(17/24)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12864液晶中文资料JHD529m1
- 下一篇: 模拟电子技术基础(一)