【模板】匈牙利算法 二分图最大匹配题模板
【任务】
给定一个二分图,用匈牙利算法求这个二分图的最大匹配数。
【说明】
求最大匹配,那么我们希望每一个在左边的点都尽量找到右边的一个点和它匹配。
我们一次枚举左边的点x的所有出边指向的点y,
若y之前没有被匹配,那么(x,y)就是一对合法的匹配,我们将匹配数加一,
否则我们试图给原来匹配的y和x’重新找一个匹配,如果x’匹配成功,那么(x,y)就可以新增为一对合法的匹配。
给x’寻找匹配的过程可以递归解决。
【接口】
int hungary();
复杂度O(|E|*sqrt(|V|))
输入: n 全局变量,左侧的点数
g 全局变量,g[i]表示与左边点i相连的右边的点
输出:tot 最大匹配数
from 全局变量,from[i]表示最大匹配图中与左边点i相连的边
【代码】
//输入:
const int MAXN = 555; // 数组长度
int n = 200; //n表示左侧的点数
vector <int> g[MAXN]; // 表示与左边点i相连的右边点//输出:
int from[MAXN];//表示最大匹配中与左边点i相连的边
int tot; // 二分图最大匹配数bool use[MAXN]; // 左边点的使用标记//匈牙利算法 模板题 ,match和hungary见小红书ACM国际大学生程序设计竞赛 算法与实现
bool match(int x){for(int i = 0;i < g[x].size(); ++i){if(!use[g[x][i]]){use[g[x][i]] = true;if(from[g[x][i]] == -1 || match(from[g[x][i]])){from[g[x][i]] = x;return true;}}}return false;
}int hungary(){tot = 0;memset(from,255,sizeof(from));for(int i = 1;i <= n; i++){memset(use,0,sizeof(use));if(match(i)) ++tot;}return tot;
}
这个我打算写给自己写题学习时用的,发出来供大家参考。
样题:http://www.cnblogs.com/zhangjiuding/p/7538564.html
【模板】匈牙利算法 二分图最大匹配题模板相关推荐
- 浅谈匈牙利算法(二分图最大匹配)
前置知识 一张图是二分图,当且仅当它的点可以被分成两部分,而这张图上的所有边的两个端点,都分属不同的部分.我们称这两个点集,一个叫左部,一个叫右部.左部中的点叫左部点:右部中的点叫右部点. 一张图的一 ...
- POJ-3041 匈牙利算法 二分图最大匹配
踢以 给出多个点的坐标 有一种攻击 可以把一次干掉同一列的 或者干掉同一行的 求最少的攻击次数 肥西 由于问题是问选取最少的行和列干掉所有的陨石 可以把输入的r和c看成r和c之间有一条连边因为要实现干 ...
- 好教程推荐系列:力扣LeetCode官网/labuladong的算法小抄/漫画算法小灰/刷题模板
LeetCode官网 https://leetcode.com/ https://leetcode-cn.com/ labuladong的算法小抄 刷算法全靠套路,认准 labuladong 就够了! ...
- hdu 4160 Dolls 匈牙利算法求最大匹配
Dolls Time Limit: 2000 ...
- nyoj239 月老的难题 (匈牙利算法,最大匹配,邻接表)
题目239 题目信息 运行结果 本题排行 讨论区 月老的难题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. ...
- 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题
题目: 题目已经说了是最大二分匹配题, 查了一下最大二分匹配题有两种解法, 匈牙利算法和网络流. 看了一下觉得匈牙利算法更好理解, 然后我照着小红书模板打了一遍就过了. 匈牙利算法:先试着把没用过的左 ...
- 【HDU - 2444】The Accomodation of Students(二分图判断 + 匈牙利算法求最大匹配)
题干: There are a group of students. Some of them may know each other, while others don't. For example ...
- 染色法判定二分图 匈牙利算法
染色法判定二分图 思路:相邻的点染不同颜色 看能不能染完 如果过程中出现相邻点相同颜色,就不可以 注意:需要遍历n个点 看此点是否被染色过 如果没有就进行一次dfs或bfs 二分图:可以把点分成两个集 ...
- 多目标跟踪之匈牙利算法
0 前言 目标跟踪(Object Tracking)是自动驾驶中非常常见的任务,根据跟踪目标数量的不同,目标跟踪可分为: 单目标跟踪(Single Object Tracking,SOT) 多目标跟踪 ...
最新文章
- 创建第一个IOS项目
- 图像转置的MATLAB和OpenCV源码
- Centos7手动安装OpenStack Mitaka版本--KeyStone安装
- Day07-函数(2)
- PWM信号作用示例——调节台灯亮度
- Linux笔记-centos7配置网卡及iftop的使用
- 像孩童一样欣喜的看着自己的成长
- python下载文件传到服务器_python实现FTP文件传输(服务器端和客户端)
- codevs1380 没有上司的舞会
- 【滤波器】基于matlab GUI IIR数字滤波器设计【含Matlab源码 044期】
- Ubuntu下搭建UDK2018开发环境
- 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例14
- 黑莓bold模拟器无法上网问题之解决
- 【论文解读 ICEIT2022】Heterogeneous Graph Based Knowledge Tracing基于异构图的知识追踪
- 智能硬件类产品测试项目总结
- 前缀,中缀,后缀表达式
- (百万字废话乱写+1小时2000字码字速度养成计划)网络支付与结算读书笔记1(20120720)...
- 1. 大数据实时计算介绍
- 远程命令/代码执行漏洞(RCE)总结
- 商家编号_caiji_004 机器人词库
热门文章
- 每日程序C语言29-将数组逆序输出
- Java黑皮书课后题第1章:1.1(显示三条消息)编写程序,显示Welcome to Java、Welcome to Computer Science和Programming is fun
- 【2012百度之星/资格赛】B:小诺爱USB设备
- 关于Linux的修复(重新引导)
- bzoj 2142 礼物
- Python字典和集合
- 洛谷.4383.[八省联考2018]林克卡特树lct(树形DP 带权二分)
- HDU1172猜数字 [模拟]
- SQL 学习与工作日常:语句积累
- HDOJ 1465 不容易系列之一 【错排公式 递推】