Cat VS Dog

题意:一群小朋友去动物园,如果每个小朋友喜欢的动物是猫,那么不喜欢的动物一定是狗,反之也是。现在动物园的管理者要拿走一些动物,如果拿走的是某个小朋友不喜欢的动物,那这个小朋友就非常开心,反之,如果是某个小朋友喜欢的动物,这个小朋友就非常的不开心,问那完后最多有几个小朋友会非常开心。

暑假最后一场个人赛,可还行,有点凉凉~~

讲真看出是二分图最大匹配的题目,但是没学最大独立集,死活建不出图来,就到底还是自己的能力不行啊!

最小覆盖:

定义:假如选了一个点就相当于覆盖了以它为端点的所有边。最小顶点覆盖就是选择最少的点来覆盖所有的边。

求解方法:最小顶点覆盖等于二分图的最大匹配。

看定义~~~~~~不懂,找了找图,照着一对比,明白了。放图

很对!没错!!最小顶点覆盖就是3,符合条件的点就是图中的{2,4,7}

最大独立集:

定义:选出一些顶点使得这些顶点两两不相邻,则这些点构成的集合称为独立集。找出一个包含顶点数最多的独立集称为最大独立集。

求解方法:最大独立集 = 顶点个数 - 最小覆盖

看了定义依旧不懂,脑子是个好东西啊,还是上边的图,再结合题意,有点懂了,关门放图~~

图中的红线是最大匹配的结果所以经过最大匹配后得到的最小覆盖是3,而筛选出来的顶点有{2,4,7},那剩下的就是最大独立集{1,3,5,6,8,9}

思路:看完知识点来解一下思路吧。将每个小朋友喜欢的动物和不喜欢的动物保存起来,遍历,如果这个小朋友喜欢的动物是另一个小朋友不喜欢的动物就在这两个之间画一条线。求最小覆盖(最大匹配),此时用总共的点数减去这个最小覆盖得结果就是高兴的小朋友的最大人数。

代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
#include <vector>
#include <algorithm>
#define FRE() freopen("in.txt","r",stdin)
#define INF 0x3f3f3f3f using namespace std;
typedef long long ll;
const int maxn = ;
int mp[maxn][maxn],link[maxn],vis[maxn];
string like[maxn];
string dislike[maxn];
int n,m,p; bool dfs(int x)
{
for(int i = ; i < p; i++)
{
if(!vis[i] && mp[x][i])
{
vis[i] = ;
if(link[i] == || dfs(link[i]))
{
link[i] = x;
return true;
}
}
}
return false;
} int hunary()
{
int res = ;
memset(link,,sizeof(link));
for(int i = ; i < p; i++)
{
memset(vis,,sizeof(vis));
if(dfs(i))
res++;
}
return res;
} int main()
{
while(scanf("%d%d%d",&n,&m,&p) != EOF)
{
for(int i = ; i < p; i++)
cin>>like[i]>>dislike[i]; memset(mp, , sizeof(mp));
for(int i = ; i < p; i++)
for(int j = ; j < p; j++)
{
if(like[i].compare(dislike[j]) == || like[j].compare(dislike[i]) == )
mp[i][j] = ;
}
int res = hunary();
printf("%d\n",p - res/);
}
return ;
}

Cat VS Dog HDU_3829(最大独立集最大匹配)的更多相关文章

  1. HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配)

    HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配) Description The zoo have N cats and M dogs, toda ...

  2. HDU 3829——Cat VS Dog——————【最大独立集】

    Cat VS Dog Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...

  3. HDU3829:Cat VS Dog(最大独立集)

    Cat VS Dog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)Total ...

  4. HDU 3829 Cat VS Dog(最大独立集)

    题目大意: 有n只猫,有m只狗.现在有P个学生去参观动物园.每个孩子有喜欢的动物和不喜欢的动物.假如他喜欢猫那么他就一定不喜欢狗(反之亦然). 如果一个孩子喜欢一个动物,那么这个动物不会被移除,若是不 ...

  5. HDU - 3829 Cat VS Dog (二分图最大独立集)

    题意:P个小朋友,每个人有喜欢的动物和讨厌的动物.留下喜欢的动物并且拿掉讨厌的动物,这个小朋友就会开心.问最多有几个小朋友能开心. 分析:对于每个动物来说,可能既有人喜欢又有人讨厌,那么这样的动物实际 ...

  6. UVA-4288 Cat vs. Dog (最大独立集)

    题目大意:猫狗大赛,s个猫和t个狗,有v个投票者,他们不是爱猫者就是爱狗者,所以爱猫者一定会对某条猫投晋级票,对某条狗投淘汰票,爱狗者亦然.现在已知这v个人的投票情况,应该使哪些畜牲晋级或淘汰才能使投 ...

  7. (hdu step 6.3.7)Cat vs. Dog(当施工方规则:建边当观众和其他观众最喜爱的东西冲突,求最大独立集)

    称号: Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  8. HDU 3289 Cat VS Dog (二分匹配 求 最大独立集)

    题意:每个人有喜欢的猫和不喜欢的狗.留下他喜欢的猫他就高心,否则不高心.问最后最多有几个人高心. 思路:二分图求最大匹配 #include<cstdio> #include<cstr ...

  9. HDU3829 Cat VS Dog —— 最大独立集

    题目链接:https://vjudge.net/problem/HDU-3829 Cat VS Dog Time Limit: 2000/1000 MS (Java/Others)    Memory ...

随机推荐

  1. 初探C++运算符重载学习笔记&lt;2&gt; 重载为友元函数

    初探C++运算符重载学习笔记 在上面那篇博客中,写了将运算符重载为普通函数或类的成员函数这两种情况. 以下的两种情况发生.则我们须要将运算符重载为类的友元函数 <1>成员函数不能满足要求 ...

  2. 3301 Square words

    3301 Square words  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 定义s ...

  3. Android:解决Gradle DSL method not found: 'runProguard()' 问题

    将Android Studio升级至最新版(1.0 RC 4)之后,运行项目时出现问题: Gradle DSL method not found: 'runProguard()' 从字面就能看出来,出 ...

  4. 交换排序(2)——冒泡排序(bubble sort)

    冒泡排序算法的运作如下:(从后往前) 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所 ...

  5. .NET平台下Redis使用(三)【ServiceStack.Redis学习】

    MVC4项目下对redis进行增删该查 Models文件下实体类: public class Book { public string BookName {get;set;} public strin ...

  6. Access restriction:The type JPEGCodec is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar 报错

    报错: Access restriction:The type JPEGCodec is not accessible due to restriction on required library C ...

  7. 67.员工职位变动js

    1.员工职位jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  8. HTTP Status 500 - Could not write content: could not initialize proxy - no Session

    分析出现no Session错误的原因以及给出解决方案: 使用SpringMVC + JSON数据返回时,经常会出现no Session的错误: 报错原因:因为懒加载在提取关联对象的属性值的时候发现E ...

  9. Unity项目 - 吃豆人Pacman

    项目展示 Github项目地址:Pacman 涉及知识 切片制作 Animations 状态机设置,any state切换,重写状态机 按键读取进行整数距离的刚体移动 用射线检测碰撞性 渲染顺序问题 ...

  10. JavaScript--如何插入JS

    我们来看看如何写入JS代码?你只需一步操作,使用<script>标签在HTML网页中插入JavaScript代码.注意, <script>标签要成对出现,并把JavaScrip ...