一、二分图
- 定义:
一个图,它的顶点可以分成2个集合X和Y,使所有的边连接的2个顶点中,一个属于X,一个属于Y。那么这就是一个二分图。 - 二分图的匹配:
给定一个二分图G,M为G边集的一个子集。若M的任意2条边都不依附于同一个顶点。则M是一个匹配。 - 最大匹配:图中包含边数最多的匹配。
- 完美匹配:如果所有点都在匹配边上,则这个匹配是完美匹配。
二、二分图判定
- 染色法:从任意节点开始染色,进行深搜。
对于每条未被染色的点,染上与相邻节点不同的颜色。若已经染色且与相邻节点颜色相同,则原图不是二分图,否则继续判断。
三、二分图的最大匹配
-
转化为单位容量简单网络的最大流问题
-
匈牙利算法
- 增广路:
若P是图G中一条连通两个未匹配顶点的路径,并且属于M与不属于M的边交替出现,则P是相对于M的一条增广路。 - poj1469 COURSES
- 完美的牛栏
- Way Selection
- 游戏
- 增广路:
-
二分图应用
- 棋盘类二分图匹配
- 最小点匹配
- 最小覆盖:最小覆盖要求用最少的点,让每条边都至少与其中一个点关联
- 易证:最少的点(覆盖数)=最大匹配数
- glod小行星群
- 二分图的最大独立集:
- 最大独立集问题:在n个点的图G中选m个点,是这个点两两之间没有边,求m最大值。
- 二分图的最大独立集数=节点数-最大匹配数(最小覆盖)
- 舞会
- 最小边覆盖
- 边覆盖集:若G中所有顶点都是E中边的覆盖顶点,则E为G的边覆盖集
- 最小边覆盖=最大独立集=n-最大匹配
- poj3020 Antenna Placement
- 无向图最小边覆盖=原图顶点数-(二分图最大匹配/2);
如何转为二分图?
拆点:将原图复制1份:若1与2相连,则1与2,连边