【题目大意】:
军事演习 分为红蓝方
但是有的兵是好友 不能被分在不同方
问最少删掉多少人 满足条件
输出 删掉人的序号(字典序最小)
【题目分析】:
一个天津的童鞋问我的~看了看……最开始悲剧了一下~
写写发现还可以,1A之~
比较裸的一个最小点覆盖集,konig定理证明就自己翻书吧~M67那里也有……
现在比较集中的问题在于字典序的问题。经典的方法就是试删。
因为原来就是一个二分图,所以我们就不该变原来的结构,0集合的都在左边,1集合的都在右边~
这样我们得到一个初始匹配,枚举点,删点,对于在X部的点,找匹配的Y点,然后沿着反向边找增广路,如果找不到,那么就这个点就删掉,否则不删~(P.s.找到增广路相当于找到了删除点的替代品~)
对于Y部的点,沿着正向边找增广路~然后情况同上。所以要写两个find函数~
【代码(为了省工写的是邻接矩阵~)】: