题目

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结束输入。
Output
对于每组数据,输出一个整数,表示可以坐上过山车的最多组合数。
Sample
Inputcopy Outputcopy
6 3 3
1 1
1 2
1 3
2 1
2 3
3 1
0
3

思路

这道题主要在于如何分配才能得到更多的组合,我们采取这种思路:给当前女生分配一个她愿意的男生后,在下一次给另一个女生分配时,如果和前一个女生分配的男生一样,那我们考虑看能不能给上一个女生换一个男生,给其他女生分配时同理。这就是匈牙利算法的思路,核心在于前面的给后面的腾出一个人。
一些代码的解释:
用flag表示女生是否愿意接受男生
used表示给每一个女生分配男生时该男生是否已被分配
boys表示男生被分配给哪个女生

used每次都要重置的原因:每次给女生分配时,每一个她愿意的男生都有可能被分配(具体分配哪个得看那个可以腾出来)

代码

#include<stdio.h>
#include<string.h>
int flag[2000][2000]={0};
int used[2000]={0};
int boys[2000]={0};
int k,n,m;
int find(int x){for(int i=1;i<=m;i++){if(flag[x][i]==1&&used[i]==0){used[i]=1;if(boys[i]==0||find(boys[i])){boys[i]=x;return 1;}}}return 0;
}
int main()
{int a,b;   while(scanf("%d %d %d",&k,&n,&m),k!=0){memset(flag,0,sizeof(flag));memset(boys,0,sizeof(boys));for(int i=0;i<k;i++){scanf("%d %d",&a,&b);flag[a][b]=1;} int cnt=0;for(int i=1;i<=n;i++){memset(used,0,sizeof(used));if(find(i)) cnt++;}printf("%d\n",cnt);}}

A - 过山车(匈牙利算法)相关推荐

  1. HDOJ2063过山车 匈牙利算法

    Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生 ...

  2. HDU 2063:过山车(匈牙利算法模板题)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. 过山车 --- 二分匹配算法 匈牙利算法 记录

    Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生 ...

  4. HDU 2063 过山车 (二分图匹配之匈牙利算法)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. 杭电oj 2063 过山车(匈牙利算法)

    前言: 匈牙利算法主要是解决二分图最大匹配问题,它用一句话总结就是"先到先得,能让就让" 这里是很板子裸匈牙利算法的一题,当然,比赛的题就没这么裸了,需要我们仔细观察.同裸的一题还 ...

  6. HDU 2063 过山车 二分图匹配 匈牙利算法

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. 匈牙利二分图最大匹配——过山车(hdu2063)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2063 题目描述: RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是, ...

  8. 杭电2063--过山车(二分匹配)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  9. HDU 2063 过山车【二分图最大匹配】

    Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生 ...

最新文章

  1. 数据结构之队列的定义与简单实现
  2. C语言中volatile关键字与汇编__volatile__
  3. tkinter中text插入_tkinter做一个体重档案
  4. creator qt 字体太小_QtCreator的一些自定义代码字体和颜色
  5. 金税盘组件接口调用方法
  6. VMware安装流畅系统Chrome OS以及国产系统FedyOS(基于Chrome OS的二次开发)
  7. WordPress添加站点图标与底部备案信息
  8. 吐血整理APP被苹果APPStore拒绝的各种原因
  9. python 爬取携程旅游景点评论
  10. linux 嵌入式 快照_Linux下搭建Cortex-M嵌入式开发环境
  11. VGA、DVI、HDMI、DP 接口介绍及优劣
  12. python不同方式爬qq音乐(get)及网易云(post)某歌手单曲歌名
  13. d使用ldc生成wasm
  14. 芮瑶学编程05-画七彩虹
  15. 计算机三级数据库知识点整理
  16. 如何方便的建立远程链接服务器
  17. 计算精确,完全可以作为包括高速公路在内的卵型曲线坐标计算。
  18. Linux下区分物理CPU、逻辑CPU和CPU核数 1
  19. 计世传媒集团中国CIO高峰论坛:“智变·创变”中的未来,CIO不只是CIO
  20. ST-PUZZLE-2.0(一个益智游戏)

热门文章

  1. Sqoop2入门之导入关系型数据库数据到HDFS上
  2. 团队项目(百药食坊)---总结
  3. 手机赚钱软件整套出售,类似赚钱宝、米赚、学生赚
  4. android调用微信程序,Android如何测试微信小游戏小程序?
  5. install python-mnist_如何用python解析mnist图片
  6. Apriltag跟踪和定位
  7. 戴尔燃7000连接不上网络
  8. 2.2 传输介质及物理层设备
  9. c语言中shmget相关函数,共享内存函数(shmget、shmat、shmdt、shmctl)及其范例 - guoping16的专栏 - 博客频道 - CSDN...
  10. 《伤寒杂病论》序——张仲景