1. 程式人生 > >[PKU 3715]Blue and Red(最小點覆蓋集)

[PKU 3715]Blue and Red(最小點覆蓋集)

【題目大意】:

軍事演習 分為紅藍方
但是有的兵是好友 不能被分在不同方
問最少刪掉多少人 滿足條件
輸出 刪掉人的序號(字典序最小)

【題目分析】:

一個天津的童鞋問我的~看了看……最開始悲劇了一下~

寫寫發現還可以,1A之~

比較裸的一個最小點覆蓋集,konig定理證明就自己翻書吧~M67那裡也有……

現在比較集中的問題在於字典序的問題。經典的方法就是試刪。

因為原來就是一個二分圖,所以我們就不該變原來的結構,0集合的都在左邊,1集合的都在右邊~

這樣我們得到一個初始匹配,列舉點,刪點,對於在X部的點,找匹配的Y點,然後沿著反向邊找增廣路,如果找不到,那麼就這個點就刪掉,否則不刪~(P.s.找到增廣路相當於找到了刪除點的替代品~)

對於Y部的點,沿著正向邊找增廣路~然後情況同上。所以要寫兩個find函式~

【程式碼(為了省工寫的是鄰接矩陣~)】: