杭电 hdu 2063 (最基础的 二分匹配)
来源:互联网 发布:arksz410788k数据手册 编辑:程序博客网 时间:2024/04/30 10:37
杭电 hdu 2063 (最基础的 二分匹配)
过山车
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13630 Accepted Submission(s): 5977
Problem Description
RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了。可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐。但是,每个女孩都有各自的想法,举个例子把,Rabbit只愿意和XHD或PQK做partner,Grass只愿意和linle或LL做partner,PrincessSnow愿意和水域浪子或伪酷儿做partner。考虑到经费问题,boss刘决定只让找到partner的人去坐过山车,其他的人,嘿嘿,就站在下面看着吧。聪明的Acmer,你可以帮忙算算最多有多少对组合可以坐上过山车吗?
Input
输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数。0<K<=1000
1<=N 和M<=500.接下来的K行,每行有两个数,分别表示女生Ai愿意和男生Bj做partner。最后一个0结束输入。
1<=N 和M<=500.接下来的K行,每行有两个数,分别表示女生Ai愿意和男生Bj做partner。最后一个0结束输入。
Output
对于每组数据,输出一个整数,表示可以坐上过山车的最多组合数。
Sample Input
6 3 31 11 21 32 12 33 10
Sample Output
3
Author
PrincessSnow
Source
RPG专场练习赛
Recommend
lcy | We have carefully selected several similar problems for you: 2444 1281 3360 1045 2065
题意:这就是最基础的二分匹配,一起做过上车,然后女生提出条件,计算最大的组队数
题解:二分匹配,算最大匹配数,其实也是dfs,遍历,通过第一个人的匹配,然后要是第二个人选中了第一个人的搭档,要是第一个人还有其他选中就将搭档让个第二个人
,接着就不断匹配。
还是看着代码来讲解好了
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>#include <iostream>using namespace std;const int maxn = 505;int map[maxn][maxn]; //记录是否可以匹配,0表示不能,1表示能int vis[maxn]; //用在不同队伍匹配是的标记作用int pri[maxn]; //记录哪个男的被特定的女生抢走int n, m;bool find (int x) //遍历{ int i; for (i = 1; i <= n; i++) //男生的遍历 { if (!vis[i] && map[x][i]) //判断这个男生和特定女生可以匹配, vis[]是用来标记的,表示暂时被x女生选中 { vis[i] = 1; if (pri[i] == -1 || find(pri[i])) //要么表示这个男的第一次被选,要是选中这个男的的女生有其他选择 { pri[i] = x; return true; } } } return false;}int main (){ int k, i, a, b, ans; while (scanf ("%d", &k) != EOF) { ans = 0; if (k == 0) return 0; scanf ("%d%d", &m, &n); memset (map, 0, sizeof (map)); memset (pri, -1, sizeof (pri)); for (i = 0; i < k; i++) { scanf ("%d%d", &a, &b); map[a][b] = 1; //将可以匹配的赋值为1 } for (i = 1; i <= m; i++) { memset (vis, 0, sizeof (vis)); //每次遍历都要进行赋初值 if (find (i)) ans++; //最大匹配数 } printf ("%d\n", ans); } return 0;}
0 0
- 杭电 hdu 2063 (最基础的 二分匹配)
- hdu 2063(基础二分匹配)
- 杭电hdu 2063 过山车 二分图匹配
- 杭电 hdu 1083 Courses (二分匹配 )
- 杭电 hdu 1150 Machine Schedule (二分匹配)
- 杭电 HDU ACM 1150 Machine Schedule(二分匹配)
- 杭电5248—序列变换,最基础的二分
- HDU杭电2063 过山车(二分图匹配 ,匈牙利算法)
- HDU 2063 过山车(基础二分匹配)模板题
- hdu 2063 过山车 基础最大二分匹配
- HDU 2063 过山车(基础二分匹配)
- 杭电2063二分图匹配(匈牙利算法)
- 杭电 hdu Warm up 2 (二分匹配)
- 杭电 hdu 1498 50 years, 50 colors (二分图,最大匹配)
- 杭电 hdu 1528 Card Game Cheater (二分图,最大匹配)
- 杭电 hdu 1507 Uncle Tom's Inherited Land*(二分图,最大匹配)
- 杭电 hdu 1350 和 1960 Taxi Cab Scheme (二分匹配 + 最小路径覆盖)
- 杭电HDU ACM Uncle Tom's Inherited Land*(二分图匹配 建模)
- 网桥
- MemcacheQ安装及使用
- CsQuery 犀利的html代码分析库,像jq一样用c#处理html
- android引入第三方jar包后打包报错
- Linux Shell之sed命令
- 杭电 hdu 2063 (最基础的 二分匹配)
- C++学习心得(5)继承与派生
- 2012年5月SAT香港真题解析
- Android开发模板------ViewPager(二)FragmentPagerAdapter的简介
- 在多个页面中地方需要登录,创建一个新的navgationController
- ABAP 在程序中启动后台JOB
- string::npos的一些说明
- 学习J2ME需要掌握的七种技术
- Android面试题