码迷,mamicode.com
首页 > 其他好文 > 详细

二分图

时间:2019-12-23 22:06:12      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:矩阵   amp   自己   span   贪心   匈牙利   最小覆盖   合法性   顶点   

定义

顶点可以分成\(A,B\)两个集合,每条边的两个顶点分别位于\(A,B\)集合中的图

以该图为例,标记黄色顶点属于集合\(A\),灰色顶点属于集合\(B\),则所有边的两个顶点分属于\(A,B\)集合,该图是一张二分图

二分图中不含奇环(不含奇环的图都是二分图)

判定

黑白染色:用\(DFS\)对原图的顶点进行染色,若某一点为黑色,则与其相邻的点全部染为白色,如果染色过程中不出现矛盾,则原图是二分图

证明:黑白染色过程中出现矛盾,当且仅当图中存在奇环

常见二分图模型

相邻两点冲突

这类题目有些图论模型是需要自己建立的

洛谷P1330 封锁阳光大学

洛谷P3430 [POI2005]DWU-Double-row

棋盘问题

棋盘通常可以黑白染色

二分图相关问题

二分图最大匹配

匹配:

任意两条边都没有公共点的一个边的集合称为二分图的一个匹配

交错路:

对于原图中的一条路径,存在奇数条边属于匹配,偶数条边不属于匹配,或相反的情况,那么这条路径被称为交错路

增广路:

对于图中任意一个匹配,如果原图存在一条长度为奇数的路径,满足路径的第奇数条边不属于该匹配,第偶数条边属于该匹配,那么这条路径被称为增广路

最大匹配:

边数最多的匹配 (不存在增广路的匹配)

如图,加粗的黑边即是二分图的一个最大匹配

匈牙利算法:

二分图中常见的寻找最大匹配的算法

其本质是贪心的从每个左部节点(\(A\)集合节点)寻找增广路的过程

依次考虑每个左部节点,找到一个右部节点与其匹配

一个右部节点能与其匹配,必须满足一下两个条件之一:

\(1.\)该节点尚未与其他左部节点匹配

\(2.\)从该右部节点匹配的左部节点出发,寻找新的尚未标记的右部节点与其匹配

条件一不用多解释,可以发现条件二就是在寻找增广路

某个臭名昭著的OJ冒烟了,没办法保证模板正确性,先不贴了

例题:

POJ2466 棋盘覆盖

洛谷P1129 [ZJOI2007]矩阵游戏

BZOJ 4950

BZOJ1443 [JSOI2009]游戏Game

二分图最小覆盖

图的覆盖:

满足每一条边都有至少一个点在其中的点集,叫做图的覆盖

最小覆盖:

包含点数最少的覆盖

最小覆盖=最大匹配(数值上)

构造:

先求出最大匹配,然后从右部节点的每一个未匹配点寻找交错路,并标记访问过的节点

则左部标记节点和右部未标记节点构成一组最小覆盖

证明:

最小性:

右侧所有未匹配点都被标记,左侧所有未匹配点都未被标记,所以所有覆盖都从匹配点中选择

对于某一联通子图,左部匹配点被选择后,右侧一定不被选择,右侧匹配点被选择后左侧一定不被选择,所以最小覆盖=最大匹配

合法性:

一对匹配点一定同时被标记或未被标记,所以所有匹配边一定被覆盖

连接左部匹配点和右部非匹配点的边会被左部覆盖

连接右部匹配点和左部非匹配点的边会被右部覆盖

最大匹配中不存在连接一对非匹配点的边

所以合法性成立

例题:

POJ1325

POJ2226

二分图最大独立集

图的独立集:

任意两点在图中没有边相连的点集

二分图最大独立集

点数最多的二分图的独立集

二分图最大独立集=图的点数-二分图最大匹配

可以理解为图中所有点减去最少的点令剩下的点没有边相连,也就是用最少的点覆盖所有的边,即最小点覆盖

先鸽子了~

二分图

标签:矩阵   amp   自己   span   贪心   匈牙利   最小覆盖   合法性   顶点   

原文地址:https://www.cnblogs.com/knife-rose/p/12088704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!