[PKU 3715]Blue and Red(最小点覆盖集)

来源:互联网 发布:免费顶级域名永久ml 编辑:程序博客网 时间:2024/04/28 18:18

【题目大意】:

军事演习 分为红蓝方
但是有的兵是好友 不能被分在不同方
问最少删掉多少人 满足条件
输出 删掉人的序号(字典序最小)

【题目分析】:

一个天津的童鞋问我的~看了看……最开始悲剧了一下~

写写发现还可以,1A之~

比较裸的一个最小点覆盖集,konig定理证明就自己翻书吧~M67那里也有……

现在比较集中的问题在于字典序的问题。经典的方法就是试删。

因为原来就是一个二分图,所以我们就不该变原来的结构,0集合的都在左边,1集合的都在右边~

这样我们得到一个初始匹配,枚举点,删点,对于在X部的点,找匹配的Y点,然后沿着反向边找增广路,如果找不到,那么就这个点就删掉,否则不删~(P.s.找到增广路相当于找到了删除点的替代品~)

对于Y部的点,沿着正向边找增广路~然后情况同上。所以要写两个find函数~

【代码(为了省工写的是邻接矩阵~)】:

原创粉丝点击