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. centos命令行安装mysql随机密码查看方法(遇到问题及其解决办法)

    mysql初次命令行安装登录时报错: 未输入密码:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwo ...

  2. [开发工具]_[Sublime Text 2]_[配置C++编译执行环境]

    场景: 1. g++的版本号更新比較快,能够使用最新的C++11特性, 这里sublime text 2是我的轻量级C++开发工具(仅仅有这个),能够使用st2这样的工具来验证一些语法新特性, 也能够 ...

  3. 【bzoj1015】[JSOI2008]星球大战starwar

    给定一个无向图,求联通块个数,以及k次每次摧毁一个点后的联通块个数 将边和摧毁的点全记录下来,反着做即可 注意被摧毁的点不能算作联通块 #include<algorithm> #inclu ...

  4. 【bzoj1002】 [FJOI2007]轮状病毒DP

    递推+环状特殊处理+高精度   #include<algorithm> #include<iostream> #include<cstdlib> #include& ...

  5. # 导入模块 from wxpy import * # 初始化机器人,扫码登陆 bot = Bot()

    # 导入模块 from wxpy import * # 初始化机器人,扫码登陆 bot = Bot()

  6. 洛谷[USACO06JAN]把牛Corral the Cows

    题目描述 约翰打算建一个围栏来圈养他的奶牛.作为最挑剔的兽类,奶牛们要求这个围栏必须是正方 形的,而且围栏里至少要有C< 500)个草场,来供应她们的午餐. 约翰的土地上共有C<=N< ...

  7. canvas做的一个写字板

    <!DOCTYPE html><html><head><title>画板实验</title> <meta charset=" ...

  8. codevs3327选择数字(单调队列优化)

    3327 选择数字  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond     题目描述 Description 给定一行n个非负整数a[1]..a[n].现 ...

  9. JavaScript学习四

    2019-06-01 09:09:23 坚持,加油!!! 函数的学习 <html> <head> <script type="text/javascript&q ...

  10. Elasticsearch之sense插件的安装(图文详解)

    sense插件可以方便的执行rest请求,但是中文输入的体验不是很好. 安装sense只需要在Kibana端安装插件即可,插件会自动安装到kibana的应用菜单中. [hadoop@master ki ...