匈牙利 算法&模板
匈牙利 算法
一. 算法简介
匈牙利算法是由匈牙利数学家Edmonds于1965年提出。该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。
二分图的定义:
设G=(V,E)是一个无向图,顶点集V可分割为两个互不相交的子集V1,V2,那么称此图G为二分图。
例如,下图就是一个二分图:

二分图的匹配:
二分图中的子图中,每个节点只连一条边,则称该子图是二分图中的一个匹配。
极大匹配:
无法再向二分图中加入边,使得满足匹配条件。
最大匹配:
所有极大匹配中边数最多的一个匹配。
完美匹配:
如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。
方法:
求最大匹配的一种显而易见的算法是:先找出全部匹配,然后保留匹配数最多的。但是这个算法的时间复杂度为边数的指数级。因此,需要寻求一种更加高效的算法。下面介绍用增广路求最大匹配的方法。
算法图解:
下图是一个二分图,现在求最大匹配。

先从1出发,找增广路,找到1->A 这条路,标记并记录。
从2出发,找到2->B这条路,标记并记录。

从3开始找,发现3所连接边全部被占用,这时进行一个神奇的操作:
从三开始找一条增广路,3 -> A -> 1 -> B -> 2 -> C

这时,在图中将有两种颜色的边删去,留下绿色的边。

这时,这张图的最大匹配值就是3.
三.算法模板
核心代码:
 bool Hungary ( int x ) {
          for ( int i = head[ x ] ; i ; i = E[ i ] . next ) {
                  if ( vis[ i ] ) continue ;
                  int temp = E[ i ] . to ;
                  vis[ i ] = true ;
                  if ( !match[ temp ] || Hungary ( match[ temp ] ) ) {
                           match [ temp ] = x ;
                           return true ;
                  }
          }
          return false ;
 } 
主程序:
for ( k= ; k<=M ; ++k ) {
                 memset ( vis , false , sizeof ( vis ) ) ;
                 if ( !Hungary ( k ) )
                         break ;
}
邻接表: O(nm)
邻接表:O(n+m)
2016-09-16 02:18:44
(完)
匈牙利 算法&模板的更多相关文章
- poj 1274 The Perfect Stall【匈牙利算法模板题】
		
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20874 Accepted: 942 ...
 - 匈牙利算法模板  hdu 1150 Machine Schedule(二分匹配)
		
二分图:https://blog.csdn.net/c20180630/article/details/70175814 https://blog.csdn.net/flynn_curry/artic ...
 - hdu 2063 过山车 (最大匹配  匈牙利算法模板)
		
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...
 - 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 1045 - Fire Net - [DFS][二分图最大匹配][匈牙利算法模板][最大流求二分图最大匹配]
		
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1045 Time Limit: 2000/1000 MS (Java/Others) Mem ...
 - POJ:3041-Asteroids(匈牙利算法模板)
		
传送门:http://poj.org/problem?id=3041 Asteroids Time Limit: 1000MS Memory Limit: 65536K Description Bes ...
 - POJ 1325 && 1274:Machine Schedule 匈牙利算法模板题
		
Machine Schedule Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12976 Accepted: 5529 ...
 - POJ 3041 匈牙利算法模板题
		
一开始预习是百度的算法 然后学习了一下 然后找到了学长的ppt 又学习了一下.. 发现..居然不一样... 找了模板题试了试..百度的不好用 反正就是wa了..果然还是应当跟着学长混.. 图两边的点分 ...
 - POJ 3041 Asteroids | 匈牙利算法模板
		
emmmmm 让你敲个匈牙利 #include<cstdio> #include<algorithm> #include<cstring> #define N 51 ...
 
随机推荐
- SVM NG课件1
			
SVM NG课件1 2014年9月28日 16:39 一个二维空间点的示例 已使用 Microsoft OneNote 2013 创建.
 - mysql5.7.11安装配置
			
1.下载安装包. mysql-5.7.11版本: http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.11-winx64.zip 2.拷贝到任意盘: ...
 - mac下php开发环境搭建+CI框架使用
			
一.启动apache: apachectl start 停止: apachectl stop 配置文件: vi /etc/apache2/httpd.conf 一.修改端口 因为80端口不想被占用,8 ...
 - Python科学计算发行版—Anaconda
			
Python是一种强大的编程语言,其提供了很多用于科学计算的模块,常见的包括numpy.scipy和matplotlib.要利用Python进行科学计算,就需要一一安装所需的模块,而这些模块可能又依赖 ...
 - HDU 5919 Sequence II 主席树
			
Sequence II Problem Description Mr. Frog has an integer sequence of length n, which can be denoted ...
 - 使用yum来安装或卸载CentOS图形界面包
			
命令行模式安装图形界面 yum grouplist 检查已安装的组 yum groupinstall "X Window System" yum groupinstall &quo ...
 - hdu 1370 Biorthythms 中国剩余定理
			
Biorhythms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
 - cf 二分图
			
题目链接:http://vjudge.net/contest/133033#problem/C 题目大意:给你n个点,m条边,将其分成两个集合,集合A是图的一个点覆盖,集合B也是图的一个点覆盖,要求集 ...
 - Python与Hack之window下运行带参数的Python脚本,实现一个简单的端口扫描器
			
1.前提是:windows已经配置好Python的环境变量: 2.进入cmd命令行模式: **输入python命令,检测是否环境配置好:显示这样说明配置环境变量没问题 **用cd命令进入Python脚 ...
 - Swift3.0语言教程获取字符串编码与哈希地址
			
Swift3.0语言教程获取字符串编码与哈希地址 Swift3.0语言教程获取字符串编码与哈希地址,以下将讲解字符串中其它内容的获取方法. 1.获取字符串编码 在NSString中可以使用2个属性获取 ...