链接:
题意:动物园有n条狗,m头猫,p个小孩。每一个小孩有一个喜欢的动物和讨厌的动物,如今动物园要转移一些动物,假设一个小孩喜欢的动物在,不喜欢的动物不在,他就会happy,问动物最多能使几个小孩happy。
思路:一个比較明显的二分图。不能以猫狗为顶点,那样找到的是哪些动物会转移,以小孩为顶点,找出最大点独立集,有两种建图方式。一种是以小孩总数p为左右点集的顶点个数。假设小孩a喜欢的动物是小孩b不喜欢的动物。就连一条边edge(a,b);另外一种是以喜欢猫的小孩总数为左顶点个数,喜欢狗的为右顶点,依据矛盾连边。
这样两种仅仅是顶点数目不同。
然后找二分图最大点独立集
二分图最大点独立集 = 顶点数 - 最大匹配数
只是第一种建图左右顶点数都是p,也就是每一个小孩在左右都有出现。总共出现两次,所以找到最大点独立集后除以2就是答案。
#include #include #include #include #include #include #include #include #include #include