# 匈牙利算法(二分图最大匹配)- hdu 过山车
匈牙利算法(二分图最大匹配)- hdu 过山车
二分图:图中的点可以分成两组U,V,所有边都是连接U,V中的顶点。等价定义是:含奇数条边的图。
匹配:一个匹配是一个边的集合,其中任意两条边都没有公共顶点(每个顶点只连出一条边)。随便找几条边,只要边没有公共顶点,就能构成匹配
最大匹配:含边数最多的匹配
完美匹配:一个匹配包含了图中的所有顶点。完美匹配都是最大匹配(所有点都连了边,无法再添加任何一条边,故为最大匹配)。不是每个图都存在完美匹配
举个栗子:考虑男女配对的问题,边表示两两之间互相有好感。完美匹配考虑的是能否让所有男孩和女孩两两配对,最大匹配考虑的是最多能让多少男女配对
最大匹配算法:匈牙利算法
二分图最大匹配实例
题意:k条边,m女孩,n男孩。接下来k行,每行描述一条边的两个顶点。问最大匹配边数。
思路:匈牙利算法解二分图匹配的模板题
AcCode:
#include <bits/stdc++.h>
using namespace std;
#define fre freopen("C:\\Users\\22765\\Desktop\\in.txt","r",stdin);
#define ms(a) memset((a),0,sizeof(a))
#define rep(i,a,b) for(register int (i)=(a);(i)<(b);++(i))
#define sf(x) scanf("%d",&(x))
#define reg register
typedef long long LL;
const int inf=(0x7f7f7f7f);
const int maxn=1000;
int k,m,n;
vector<int> v[maxn];
bool vis[maxn];
int part[maxn];
//find(x):x能否找到配对的女孩
int find(int x){
int u;
rep(i,0,v[x].size()){//依次尝试和他有好感的每个女孩
u=v[x][i];
/*
vis数组用法详解:
如下的好感关系:
男 女
1 4 5
2 5 6
3 4 5
0 6
假设 1-5,2-6,3-4
对于 0来说,先尝试6
6没有访问过,标记为已访问
但是6有对象了,尝试6的对象2能否找其他女孩
2尝试找5,对于0来说,5没有访问,标记5被访问
但是5有对象了,尝试5的对象1能都找其他女孩
1尝试4,对于0来说,4没有访问,标记4为被访问
但是4有对象了,尝试4的对象3能否找其他女孩
3除了4只能找5了,但是5在第二步被标记为访问过,
如果尝试5就会倒回第二步造成死循环。
所以0号男孩无法找到配对的女孩,回溯一直返回false
*/
if(!vis[u]){
vis[u]=1;
//如果女孩没有找到partner或者女孩的partner可以找其他女孩
if(!part[u]||find(part[u])){
part[u]=x;
return true;
}
}
}
return false;
}
int main(){
while(sf(k)&&k){
scanf("%d%d",&m,&n);
rep(i,1,n+1)v[i].clear();
ms(part);
int x,y;
rep(i,0,k){
sf(x);sf(y);
v[y].push_back(x);//存边
}
int ans=0;
rep(i,1,n+1){//对于每个男孩,找配对的女孩
ms(vis);//每轮查找标记女孩是否访问过
if(find(i)) ans++;
}
printf("%d\n",ans);
}
return 0;
}
# 匈牙利算法(二分图最大匹配)- hdu 过山车的更多相关文章
- poj1274 匈牙利算法 二分图最大匹配
poj1274 题意: 有n个奶牛, m个畜舍, 每个畜舍最多装1头牛,每只奶牛只有在自己喜欢的畜舍里才能产奶. 求最大产奶量. 分析: 其实题意很明显, 二分图的最大匹配, 匈牙利算法. #incl ...
- 匈牙利算法求最大匹配(HDU-4185 Oil Skimming)
如下图:要求最多可以凑成多少对对象 大佬博客: https://blog.csdn.net/cillyb/article/details/55511666 https://blog.csdn.net/ ...
- hdu——过山车(二分图,匈牙利算法)
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 【01染色法判断二分匹配+匈牙利算法求最大匹配】HDU The Accomodation of Students
http://acm.hdu.edu.cn/showproblem.php?pid=2444 [DFS染色] #include<iostream> #include<cstdio&g ...
- hdu2063 匈牙利算法 二分最大匹配模版题
过山车 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %I64d , %I64u Java class na ...
- [模板] 匈牙利算法&&二分图最小字典序匹配
匈牙利算法 简介 匈牙利算法是一种求二分图最大匹配的算法. 时间复杂度: 邻接表/前向星: \(O(n * m)\), 邻接矩阵: \(O(n^3)\). 空间复杂度: 邻接表/前向星: \(O(n ...
- Bzoj 1562: [NOI2009]变换序列 匈牙利算法,二分图匹配
题目: http://cojs.tk/cogs/problem/problem.php?pid=409 409. [NOI2009]变换序列 ★★☆ 输入文件:transform.in 输出文 ...
- HDU 2444 - The Accomodation of Students - [二分图判断][匈牙利算法模板]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Mem ...
- HDU 2444 The Accomodation of Students【二分图最大匹配问题】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意:首先判断所有的人可不可以分成互不认识的两部分.如果可以分成 ,则求两部分最多相互认识的对数. ...
随机推荐
- [CSP-S模拟测试]:A(数学)
题目传送门(内部题44) 输入格式 一行四个整数,分别表示$S,T,a,b$. 输出格式 输出最小步数,数据保证有解. 样例 样例输入: 10 28 4 2 样例输出: 数据范围与提示 样例解释: 先 ...
- vue 2.x 的 v-bind 指令的 .prop 事件修饰符详解
vue 官方文档对 .prop 修饰符的解释是: 使用例子: 那么,具体的原理和用法是什么呢?这要从 html 的 DOM node 说起. 在 html 标签里,我们可以定义各种 attribute ...
- 从输入url到页面加载完成都发生了什么
https://zhuanlan.zhihu.com/p/23155051 参考 一个http请求的过程 简要介绍一下一个http请求的网络传输过程: DNS Lookup先获得URL对应的IP地址( ...
- LeetCode 86. 分隔链表(Partition List)
题目描述 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1-> ...
- VNC连接Ubuntu 16.04桌面灰色的问题解决
1.安装gnome apt-get install --no-install-recommends ubuntu-desktop gnome-panel gnome-settings-daem ...
- RzPageControl(pagecontrol)实现多标签的动态添加,切换,关闭
https://blog.csdn.net/pdw2009/article/details/76157651 使用RzPageControl来实现多标签页使用菜单来打开标签页,通过标签页的captio ...
- GitHub:Tencent
ylbtech-GitHub:Tencent 1.返回顶部 1. https://opensource.tencent.com/ 2. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶 ...
- 自定义View绘制简单的圆环的实现
package com.loaderman.mywave; import android.content.Context; import android.graphics.Canvas; import ...
- [shell]上一个命令执行完成,才执行下一个操作 | shell脚本中判断上一个命令是否执行成功
shell脚本中判断上一个命令是否执行成功 shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败.结合if-else语句实现判断上一个命令是否执行成功. 场 ...
- APP营销软件项目常见(合规)风险评估
一个软件项目开始前,往往需要先进行风险评估以及可行性评估,尤其涉及到营销拉新类项目,需要大量依靠用户二次分享传播,为了避免项目做了无用功,分享一些常见的App项目风险: 微信分享功能 风险: 1.蒙层 ...