hdu2063 二分图(基础题)
这个题目适合刚刚接触二分图的同学做哦:
给一个题目链接 点击打开链接。
题目大意,有K个男女匹配方式, 输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数。0<K<=1000
1<=N 和M<=500.接下来的K行,每行有两个数,分别表示女生Ai愿意和男生Bj做partner。最后一个0结束输入。
输出最大的男女匹配对数,匹配方式为,一个男生匹配一个女生;
题目思路:
先让1与能匹配到的男生进行匹配,用一个数组记录与该男生匹配的女生是谁?
如果该男生没有匹配直接匹配,即可。
如果该男生已经被摸个女生匹配,就让该男生匹配女生重新进行匹配。
否则 ,表示该女生匹配不到人。
这个题目是 裸的二分图 直接用模板,
算法是: 匈牙利算法
#include<iostream>
#include<string.h>
#include<cstdio> using namespace std;
const int MM=505;
bool adjmat[MM][MM],vis[MM];
int boy_s_girl[MM];
int k,girl,boy; int pipei(int people) //需要进行匹配的女生
{
int i;
for(i=1;i<=boy;i++) // 男生
{
if(adjmat[people][i]&&!vis[i]) // 如果该女生可以与该男生匹配 且该男生未被匹配
{
vis[i]=1;
if(boy_s_girl[i]==0||pipei(boy_s_girl[i])) // 如果该男生未被匹配 ,或者
// 继续找该男生匹配到女生除他以外的其他男生
{
boy_s_girl[i]=people;
return 1;
}
}
}
return 0;
}
int main()
{
int ans;
while(scanf("%d",&k)!=EOF&&k)
{
scanf("%d %d",&girl,&boy);
int i;
memset(adjmat,0,sizeof(adjmat));
memset(boy_s_girl,0,sizeof(boy_s_girl));
ans=0;
for(i=0;i<k;i++)
{
int a,b;
scanf("%d %d",&a,&b);
adjmat[a][b]=true;
}
for(i=1;i<=girl;i++)
{
memset(vis,0,sizeof(vis));
ans+=pipei(i);
}
cout<<ans<<endl;
}
return 0;
}
hdu2063 二分图(基础题)的更多相关文章
- Android测试基础题(三)
今天接着给大家带来的是Android测试基础题(三). 需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...
- 小试牛刀3之JavaScript基础题
JavaScript基础题 1.让用户输入两个数字,然后输出相加的结果. *prompt() 方法用于显示可提示用户进行输入的对话框. 语法: prompt(text,defaultText) 说明: ...
- 小试牛刀2:JavaScript基础题
JavaScript基础题 1.网页中有个字符串“我有一个梦想”,使用JavaScript获取该字符串的长度,同时输出字符串最后两个字. 答案: <!DOCTYPE html PUBLIC &q ...
- HDU 1301 Jungle Roads (最小生成树,基础题,模版解释)——同 poj 1251 Jungle Roads
双向边,基础题,最小生成树 题目 同题目 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<stri ...
- nyist oj 79 拦截导弹 (动态规划基础题)
拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描写叙述 某国为了防御敌国的导弹突击.发展中一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以 ...
- 【二分图裸题】poj1325机器调度
题目大意:有两个机器A和B,A机器有n个模式,B机器有m个模式,两个机器最初在0模式 然后有k个作业,每个作业有三个参数i,a,b i代表作业编号,a和b代表第i作业要么在A机器的a模式下完成[或者] ...
- linux面试题-基础题1
第1章 基础题1 1.1 在装系统创建Linux分区时,一般至少需要创建两个分区( ) A.FAT.NTFS B. /usr.swap C. /boot.swap D.swap./ 1.2 ...
- Java面试题以及答案精选(架构师面试题)-基础题1
基础题 一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?1. String是字符串常量,StringBuffer和StringBu ...
- C++笔试题2(基础题)
温馨提醒:此文续<C++笔试题(基础题)> (112)请写出下列程序的输出内容 代码如下: #include <iostream> using namespace std; c ...
随机推荐
- hdu1569 方格取数 求最大点权独立集
题意:一个方格n*m,取出一些点,要求两两不相邻,求最大和.思路:建图,相邻的点有一条边,则建立了一个二分图,求最大点权独立集(所取点两两无公共边,权值和最大),问题转化为求总权和-最小点权覆盖集(点 ...
- raspberry pi系统安装
1.格式化SD卡,用SDFormatter 2.解压下载的操作系统 3.复制操作系统到SD卡(要放在根目录,把最外面的文件夹路径去掉) 4.把SD卡插入raspberry pi,接上电源 5.在启动界 ...
- JQuery select 编程时选中原有的值
js 此为核心代码 $(document).ready(function(){ $("#carTypeId").attr("value",'${carInfo. ...
- JDBC连接MySQL数据库的示例代码
虽然老调,但有时也需要用一下,从网上找的原型修改了下放这. import java.sql.Connection; import java.sql.DriverManager; import java ...
- ZOJ 3230 Solving the Problems(数学 优先队列啊)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3230 Programming is fun, Aaron is ...
- TC SRM 583 DIV 2
做了俩,rating涨了80.第二个题是关于身份证的模拟题,写的时间比较长,但是我认真检查了... 第三个题是最短路,今天写了写,写的很繁琐,写的很多错. #include <cstring&g ...
- 网络基础 二 (TCP协议代码,UDP协议代码)
TCP 三次握手,四次断开 三次握手(必须先由客户端发起) 客户端:发送请求帧给服务器. 服务器:收到客户端的请求,并回复可以建立连接 客户端:与服务器建立连接 四次断开 (谁先发起都行,以客户端为 ...
- 我遇到的错误curl: (7) Failed to connect to 127.0.0.1 port 1086: Connection refused
今天我用curl命令,无论如何都是出现: curl: (7) Failed to connect to 127.0.0.1 port 1086: Connection refused 找了很久,不知道 ...
- Xamarin.Android 记事本(二)自定义AlertDialog
导读 1.自定义一个AlertDialog 2.添加一条数据 正文 记事本应当有一个添加功能,这里我打算在右上角放一个item,然后点击这个item弹出一个对话框,输入名称,点击确定跳转到另一个act ...
- CrateDb
CrateDB: Real-time SQL Database for Machine Data & IoT | Crate.io https://crate.io/