HDU 2063 过山车 二分匹配
解题报告:有m个女生和n个男生要结成伴坐过山车,每个女生都有几个自己想选择的男生,然后要你确定最多能组成多少对组合。
最裸的一个二分匹配,这是我第一次写二分匹配,给我最大的感受就是看那些人讲的匈牙利算法真不知道他们是怎么写的,看着就觉得很麻烦,好像很难的样子,我这是看第二次,最后还是没看懂,最后实在没办法了,直接看代码了,才发现,原来二分匹配可以用很简单的描述,下面我就用我的语言描述一下:
假如分成两个集合X和Y,我们可以从X 中的第一个元素枚举到最后一个,然后每次枚举的内容就是从X 出发,找这个元素能不能跟Y中的一个元素进行匹配,关键就是这个查找的函数,这个可以用dfs或者bfs,这里我就讲用dfs实现的,枚举X中的一个元素的时候,我们就从这个元素出发,从Y的元素开始枚举,如果Y的有元素还没有被匹配,则返回,就将这两个元素匹配起来,而如果这个Y中的元素在前面已经被匹配过了,那么就递归,看跟Y匹配的是X中的哪一个元素,其实说白了就是看X中的这个元素还能不能跟Y中的其它元素匹配,就是说把X中的这个元素当前已经匹配的Y中的元素让出来,让给当前正在匹配的那个元素,而自己去寻找是否有其它的元素跟自己匹配,这样一直下去之后,就能达到最多的匹配的效果了。
#include<cstdio>
#include<cstring>
const int maxn = +;
int map[maxn][maxn],visit[maxn],pipei[maxn],k,m,n,x,y; int dfs(int x) {
for(int i = ;i<=n;++i)
if(!visit[i] && map[x][i]) {
visit[i] = ;
if(!pipei[i] || dfs(pipei[i])) {
pipei[i] = x;
return ;
}
}
return ;
} int main() {
while(scanf("%d",&k),k) {
scanf("%d%d",&m,&n);
memset(map,,sizeof(map));
memset(pipei,,sizeof(pipei));
while(k--) {
scanf("%d%d",&x,&y);
map[x][y] = ; //切不可加上map[y][x]也等于1
}
int tot = ;
for(int i = ;i<=m;++i) {
memset(visit,,sizeof(visit));
tot += dfs(i);
}
printf("%d\n",tot);
}
return ;
}
HDU 2063 过山车 二分匹配的更多相关文章
- hdu 2063 过山车 二分匹配(匈牙利算法)
简单题hdu2063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Ot ...
- HDU 2063 过山车(二分匹配入门)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 二分匹配最大匹配数简单题,匈牙利算法.学习二分匹配传送门:http://blog.csdn.ne ...
- hdu 2063 过山车(匈牙利算法模板)
http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Others) Memory ...
- hdu 2063 过山车(模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Others) Me ...
- HDU 2063 过山车 第一道最大二分匹配
http://acm.hdu.edu.cn/showproblem.php?pid=2063 题目大意: m个女生和n个男生一起做过山车,每一排必须一男一女,而每个女孩愿意和一些男生坐一起,, 你要找 ...
- POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24081 Accepted: 106 ...
- HDU2063 过山车(二分匹配)
过山车 HDU - 2063 RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做part ...
- HDU - 2063 过山车(最大匹配数)(模板)
1.男生女生一起坐过山车,每一排有两个座位,但是有个条件,就是每个女生必须找个男生做同伴一起(但是女生只愿意和某几个男生中的一个做同伴),求最多可以有多少对男女生组合坐上过山车. 2.二分图的最大匹配 ...
- HDU 2063 过山车 (匈牙利算法)
题目链接:HDU 2063 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩 ...
随机推荐
- [转帖]中国SaaS死或生之一:“网红”CRM的大起大落
中国SaaS死或生之一:“网红”CRM的大起大落 http://www.cniteyes.com/archives/33709 文章摘要:从“大众情人”到被人遗弃,如何从CRM身上审视中国Sa ...
- (很难啊)如何实时获取DBGrid 中当前单元格输入的内容? [问题点数:100分,结帖人yifawu100]
如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理,用什么事件呢? 所以Field的Onchange事件是没用的. DBGrid1.Selec ...
- Find First and Last Position of Element in Sorted Array - LeetCode
目录 题目链接 注意点 解法 小结 题目链接 Find First and Last Position of Element in Sorted Array - LeetCode 注意点 nums可能 ...
- 【bzoj3122】 Sdoi2013—随机数生成器
http://www.lydsy.com/JudgeOnline/problem.php?id=3122 (题目链接) 题意 对于一个数列${X_i}$,其递推式为:${X_{i+1}=(a*X_i+ ...
- 20165218 《网络对抗技术》 Exp5 MSF基础应用
Exp5 MSF基础应用 实践内容 主动攻击:ms08_067 exploit/windows/smb/ms08_067_netapi generic/shell_reverse_tcp 针对浏览器攻 ...
- JS的对象原型
1.对象 1.1 语法 对象可以通过两种形式定义:声明(文字)形式和构造形式. 对象的文字语法: var myObj = { key : value //... }; 对象的构造语法: var myO ...
- mysql INNER/LEFT/RIGHT JOIN区别
1.创建table DROP TABLE IF EXISTS `tab_id_index`; CREATE TABLE `tab_id_index` ( `id` ) ', `name` ) DEFA ...
- ES6学习(一)搭建环境
作为一名后端小开发,业务工作需要将后台系统重构一番,许多同事都已经使用前后分离搭建项目,为了不拖后腿自己在家摸索ES6的新特性,真心不知道什么ES3,ES5,一上来就开始搞ES6,在此留下学习笔记,方 ...
- Python 爬虫入门(一)
毕设是做爬虫相关的,本来想的是用java写,也写了几个爬虫,其中一个是爬网易云音乐的用户信息,爬了大概100多万,效果不是太满意.之前听说Python这方面比较强,就想用Python试试,之前也没用过 ...
- python中的关键字符
from keyword import kwlistprint(kwlist)for i in kwlist: print(i) 可以显示所有的关键字符,开发者不要重新赋予其他值. a = 10000 ...