匈牙利算法小结
關(guān)于匈牙利算法的小結(jié)
二分圖定義:
兩個(gè)非空集合A, B A與B沒有交集,同一集合內(nèi)部沒有連邊,這個(gè)圖為二分圖,A為左部,B為右部。
判定:
二分圖不存在奇環(huán)。
用染色法即可。
NOIP2010關(guān)押罪犯
二分圖最大匹配
二分圖沒有增廣路時(shí),就是最大匹配。
特點(diǎn):當(dāng)一個(gè)點(diǎn)成為匹配點(diǎn)后,至多找到增廣路更換匹配對象,但是絕不會變回非匹配點(diǎn)。
時(shí)間復(fù)雜度 \(O(nm)\)
匈牙利算法代碼框架(模板)
只用從左向右建單向邊!!
建議使用vector
題目 && 模型
Round1
1.棋盤覆蓋
題解
二分圖匹配的0/1要素:
0要素:點(diǎn)能分成兩個(gè)獨(dú)立的集合,每個(gè)集合內(nèi)部沒有邊
1要素:每個(gè)點(diǎn)只能有一條匹配邊相連
這題將骨牌看做邊,格子看做點(diǎn),建模。
同類題: 車的放置
2.導(dǎo)彈防御塔
二分圖多重匹配,拆點(diǎn),或使用網(wǎng)絡(luò)流,一般使用網(wǎng)絡(luò)流。
3.二分圖帶權(quán)匹配
網(wǎng)絡(luò)流吧。
Round2
1. 二分圖最小點(diǎn)覆蓋Machine Schedule
定理:二分圖最小點(diǎn)覆蓋=最大匹配邊數(shù)。
模型特點(diǎn):每條邊有兩個(gè)端點(diǎn),兩者至少選一個(gè)
同類題Muddy Fields, POJ3041
2. 二分圖最大獨(dú)立集騎士放置
定理:二分圖最大獨(dú)立集=節(jié)點(diǎn)數(shù)-最大匹配數(shù)
3. \({\rm DAG}\)最小路徑點(diǎn)覆蓋
給一個(gè) \({\rm DAG}\) ,要求用盡量少的不相交的簡單的路徑,覆蓋 \({\rm DAG}\) 的所有頂點(diǎn)。
定理:\({\rm DAG}\)的最小路徑點(diǎn)覆蓋包含的路徑條數(shù) = 點(diǎn)數(shù) - 拆點(diǎn)二分圖最大匹配數(shù)
拆點(diǎn)二分圖:設(shè) \({\rm DAG}\) 為 \({\rm G=(V,E)}\),拆點(diǎn)二分圖為 \({\rm G'=(V',E')}\) 將G中的每一個(gè)點(diǎn) \(x\) 拆成左部節(jié)點(diǎn) \(x\) 與右部節(jié)點(diǎn) \(x+n\) , 對于 \({\rm E(x, y)}\) 在 \({\rm G'}\) 中連單向邊 \({\rm E'(x, y + n)}\) , 得到的 \({\rm G'}\) 就是拆點(diǎn)二分圖。
同類題:魔術(shù)球問題 題解 我的代碼
Round3
1.[SCOI2010]連續(xù)攻擊游戲
Sol. code
每個(gè)集合只能選一個(gè)元素的模型
2.[ZJOI2007]矩陣游戲
Sol. and code
棋盤模型
3.[NOI2009]變換序列
Sol. and code
匈牙利算法的本質(zhì)
4.[HNOI2013]消毒
Sol. and code
枚舉 + 最小點(diǎn)覆蓋模型
5.[SHOI2001]小狗散步
Sol. and code
“Pandog每次與主人相遇之前最多只去一個(gè)景點(diǎn)”, 建立二分圖最大匹配的關(guān)鍵信息
省選之前就寫這么多了。
轉(zhuǎn)載于:https://www.cnblogs.com/cnyali-Tea/p/10633114.html
總結(jié)
- 上一篇: aidl demo调用原理
- 下一篇: SQL Server 查找统计信息的采样