过山车

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 11520    Accepted Submission(s): 5072
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结束输入。
 
Output
对于每组数据,输出一个整数,表示能够坐上过山车的最多组合数。

 
Sample Input
6 3 3
1 1
1 2
1 3
2 1
2 3
3 1
0
 
Sample Output
3

第一道二分匹配题。

纯属模板。

參考:http://blog.csdn.net/wellerzhao/article/details/7756956

代码1:

#include <stdio.h>
#include <string.h>
#define M 555 int map[M][M];
int mx[M], my[M];
int vis[M];
int n, m; int find(int s){
int i;
for(i = 1; i<= m; i ++){
if(!vis[i]&&map[s][i]){
vis[i] = 1;
if(my[i] == 0||find(my[i])){
my[i] = s;
mx[s] = i;
return 1;
}
}
}
return 0;
} void f(){
for(int i = 1; i <= n; i ++)
printf("%d..%d,,%d..%d\n", i, mx[i], i, my[i]);
}
int main(){
int k;
while(scanf("%d", &k), k){
int i;
memset(map, 0, sizeof(map));
memset(mx, 0, sizeof(mx));
memset(my, 0, sizeof(my));
int a, b;
scanf("%d%d", &n, &m);
for(i = 0; i < k; i ++){
scanf("%d%d", &a, &b);
map[a][b] = 1;
}
int ans = 0;
for(i = 1; i<= n; i ++){
if(!mx[i]){
memset(vis, 0, sizeof(vis));
if(find(i)) ++ans;
}
}
printf("%d\n", ans);
// f();
}
return 0;
}

以下的代码是另外的一种形式,,只是仅仅是多了个数组。

。。

思想还是一样的

代码;

#include <stdio.h>
#include <string.h>
#define M 555 int map[M][M];
int mx[M], my[M];
int vis[M];
int n, m; int find(int s){
int i;
for(i = 1; i<= m; i ++){
if(!vis[i]&&map[s][i]){
vis[i] = 1;
if(my[i] == 0||find(my[i])){
my[i] = s;
mx[s] = i;
return 1;
}
}
}
return 0;
} void f(){
for(int i = 1; i <= n; i ++)
printf("%d..%d,,%d..%d\n", i, mx[i], i, my[i]);
}
int main(){
int k;
while(scanf("%d", &k), k){
int i;
memset(map, 0, sizeof(map));
memset(mx, 0, sizeof(mx));
memset(my, 0, sizeof(my));
int a, b;
scanf("%d%d", &n, &m);
for(i = 0; i < k; i ++){
scanf("%d%d", &a, &b);
map[a][b] = 1;
}
int ans = 0;
for(i = 1; i<= n; i ++){
if(!mx[i]){
memset(vis, 0, sizeof(vis));
if(find(i)) ++ans;
}
}
printf("%d\n", ans);
// f();
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

hdoj 2063 过山车 【双边匹配匈牙利算法】的更多相关文章

  1. hdu 2063 过山车 二分匹配(匈牙利算法)

    简单题hdu2063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Ot ...

  2. hdoj 2063 过山车【匈牙利算法+邻接矩阵or邻接表】

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

  3. HDU 2063 过山车 二分匹配

    解题报告:有m个女生和n个男生要结成伴坐过山车,每个女生都有几个自己想选择的男生,然后要你确定最多能组成多少对组合. 最裸的一个二分匹配,这是我第一次写二分匹配,给我最大的感受就是看那些人讲的匈牙利算 ...

  4. HDU 2063 过山车(二分图 && 匈牙利 && 最小点覆盖)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 这是一道很经典的匈牙利问题: 把男同学看成左边点,女同学看成右边点,如果两个同学愿意同 ...

  5. HDU 2063 过山车(二分匹配入门)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 二分匹配最大匹配数简单题,匈牙利算法.学习二分匹配传送门:http://blog.csdn.ne ...

  6. HDOJ 2063 过山车

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

  7. hdu 2063 过山车(匈牙利算法模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory ...

  8. hdu 2063 过山车(模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  9. HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

随机推荐

  1. 教你怎么去一个APP的JSON数据,你懂的

    今天闲着没事.谁让我今天是光棍节呢,算给大家一个福利.没事逛着应用市场.想找个应用高仿下,突然发现一个应用竟然跟我一个名字尼玛,尼玛应用界面做的非常easy.我认为应该不难. 惯性操作想去破解APK. ...

  2. 【python】按行切分文本文件

    python脚本利用shell命令来实现文本的操作, 这些命令大大减少了我们的代码量. 比如按行切分文件并返回切分后得到的文件列表,可以利用内建的split命令进行切分.为了返回得到的文件列表名,可以 ...

  3. windows phone (21) Grid元素的Background和Clip

    原文:windows phone (21) Grid元素的Background和Clip Grid是唯一可以在内部定制单元格的panel类,我们可以在grid中定制单元格,然后通过grid.row和g ...

  4. 国庆去学校的国际象棋(Latex)

    国庆节去学棋与朋友. 看国外的网站更有趣的事情. 很快打下来. 首先效应: 嘿嘿  代码来了哟: \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc ...

  5. 搭建solr单机版

    solr单机版的搭建 一.solr单机版的搭建 1.运行环境 solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(ja),本教va写 ...

  6. DevExpress控件中LayoutControl的使用

    原文:DevExpress控件中LayoutControl的使用 C#开发中,软件布局设计,主要用TableLayoutPanel能很好地支持缩放功能,对自身的Label.TextBox等控件支持的很 ...

  7. 配置jndi服务,javax.naming.NamingException的四种情况

    1.当jndi服务没有启动,或者jndi服务的属性没有设置正确,抛出如下异常: javax.naming.CommunicationException: Can't find SerialContex ...

  8. android集成apk对一些问题经常遇到系统

    1.集成APK必须确认是否release版本号,否则会导致CTS测试失败. 途径:反编译apk,视图manifest.xml文件,看<application>在那里debug属性:andr ...

  9. 学习FFmpeg API – 解码视频

    本文转载 视频播放过程 首先简单介绍以下视频文件的相关知识.我们平时看到的视频文件有许多格式,比如 avi, mkv, rmvb, mov, mp4等等,这些被称为容器(Container), 不同的 ...

  10. MVC @Html控件

    传统的Html元素不能和服务端数据进行绑定 HtmlHelper类提供了一系列的方法来生成Html元素 并可以实现与数据绑定在一起 然后生成Html Html.BeginForm(actionName ...