二分匹配的常用建图方法

学习了一些常用建图方法,又理解了一遍二分,感觉更加清晰了。

1.行列匹配法;在一个矩阵中,加入上面一些点有人,现在有一些箭能将一行或一列的人杀死,问最少需要多少箭?
因为箭要最少,所以要尽可能的在一行或一列上,即最小顶点覆盖问题。这时可以通过行列来进行二分匹配;假如位置(1,1),(1,3),(2,2),
(3,1) 则横坐标1 2 3,纵坐标 1 2 3间有一定的关系,最小点覆盖=最大匹配数;

2.反建法;假如有一个嫉妒封建的老师,他不希望同学间发生恋情。老师发现,满足一下条件的同学发生恋情的几率小:
1》身高差〉40 2》性别相同 3》爱好不同的音乐4》爱好同类型的运动;由于相同性别的同学不可能发生恋情,所以就成了男生和女生间的关系;
由于正面直接求答案可能有误,可以先求出能发生恋情的可能,把有上面任一条件的男女连一条边,然后一减就是答案了;

3.拆点法;拆点法适用于解决最小路径覆盖问题;给出一张图,需要找到一些路径,可以把所有的点都经过,并且路径不产生交叉。这时可以把点1拆为x1,y1、
点2拆为x2,y2.........;这时求二分图最大匹配,可以得到每个匹配对应一个路径覆盖,将2个点连在一起,最后所有点减去匹配数(即相连的点只要一条既可)就是
最小路径覆盖数;最小路径覆盖=最大独立集
最小路径覆盖:假如有一张图,用尽可能的路径把所有的点经历一遍。hdu4160;

4:一行变多行,一列变多列;如第一种题目一样,不能再同一行或列有点,但是现在增加了墙,某一行多了一个墙,那么这一行就成了2行;用这种方法既可;

5:黑白染色法;一张图中有一些点,现在要用1*2的长条去覆盖这些点,问至少需要多少;我是这样理解的:,先对每个能放的点标号,对于每个点,如果他的上下左右能够放
长条,那么就从该点到其方向上的点连一条边,这样建图就完成了;求一次最大匹配既可;

时间: 2024-10-11 22:56:09

二分匹配的常用建图方法的相关文章

二分图最大匹配及常用建图方法

转载百度文库 算法---艺术 二分图匹配剖析 很多人说,算法是一种艺术.但是对于初学者的我,对算法认识不是很深刻,但偶尔也能感受到他强大的魅力与活力. 这让我追求算法的脚步不能停止.下面我通过分析匈牙利算法以及常用建图方式,与大家一起欣赏算法的美. 匈牙利算法 匈牙利算法是用来解决最大二分图匹配问题的,所谓二分图即 "一组点集可以分为两部分,且每部分内各点互不相连,两部分的点之间可以有边".所谓最大二分图匹配即 "对于二分图的所有边,寻找一个子集,这个子集满足两个条件, 1:

POJ 2226 Muddy Fields(二分匹配 巧妙的建图)

题目链接:http://poj.org/problem?id=2226 Description Rain has pummeled the cows' field, a rectangular grid of R rows and C columns (1 <= R <= 50, 1 <= C <= 50). While good for the grass, the rain makes some patches of bare earth quite muddy. The co

POJ 3686 The Windy&#39;s【最小权匹配(神建图啊)】

大意:有n个任务m个机器,告诉你n*m的矩阵表示每个任务在每个机器上完成需要的时间 问所有任务完成的总时间最少?(比如第一个任务在第一分钟完成第二个任务在第二分钟完成   则总时间为1 + 2 = 3 分析: 该题自己做的时候没有思路 后来在网上搜题解,感觉建图真是太厉害了 假设最优情况下,个个任务需要的时间分别为a1, a2, a3, ……,an 那么总时间t = n * a1 + (n - 1) * a2 + ……+ 2 * an - 1 + an 也就是说只需要考虑系数就可以了 我们先假设

二分图最大匹配,最小路径覆盖,最小点覆盖,最大独立集,最小边覆盖与建图方法

转载请注明出处(别管写的好坏,码字也不容易):http://blog.csdn.net/hitwhacmer1 前言:         有自己写的,有摘的别人的,前面是摘的,也是无心整理,出错是难免的,反正我都不会证明,智人见智,别被我误导了. §1图论点.边集和二分图的相关概念和性质 点覆盖.最小点覆盖 点覆盖集即一个点集,使得所有边至少有一个端点在集合里.或者说是"点" 覆盖了所有"边"..极小点覆盖(minimal vertex covering):本身为点覆

二分图常见建图方法

二分图是图论比较重要的一部分,在实际生活中有广泛的应用,比如,分配工作时如何最优分配使得尽可能多的人做自己擅长或感兴趣的时等等出现匹配的问题都需要用二分图解决.不过,二分图的应用不仅仅在这些比较直观上的匹配问题上用到,还有很多实际问题可以通过二分图的一些性质,来匹配解决,比如:如何在一个超市里装最少的摄像头来覆盖整个超市,如何在边防设立最少的岗哨覆盖整个军营等等,在二分图中就叫做最小点覆盖.当然,还有最小边覆盖,最小支配集,最大独立集等都可以应用到实际问题中. 上面这些性质固然重要,是我们应用的

HDU3572Task Schedule(最大流 ISAP比较快)建图方法不错

Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5007    Accepted Submission(s): 1636 Problem Description Our geometry princess XMM has stoped her study in computational geometry t

kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树

二分匹配:二分图的一些性质 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图. 1.一个二分图中的最大匹配数等于这个图中的最小点覆盖数 König定理是一个二分图中很重要的定理,它的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数.如果你还不知道什么是最小点覆盖,我也在这里说一下:假如选

POJ2226 Muddy Fields 二分匹配 最小顶点覆盖 好题

在一个n*m的草地上,.代表草地,*代表水,现在要用宽度为1,长度不限的木板盖住水, 木板可以重叠,但是所有的草地都不能被木板覆盖. 问至少需要的木板数. 这类题的建图方法: 把矩阵作为一个二分图,以行列分别作为2个顶点集 首先以每一行来看,把这一行里面连续的*编号,作为一个顶点 再以每一列来看,把这一列里面连续的*编号,作为一个顶点 则每一个*都有2个编号,以行看时有一个,以列看时有一个,则把这2个编号连边,容量为1 再建一个源点,连接所有行的编号,一个汇点,连接所有列的编号 这道题要求的是,

建图方式一 之 ”前向星“ BFS&amp;&amp;DFS 简单应用

三种建图方式,邻接矩阵.前向星(边表集).邻接链表! 耗时一晚上 ,好好研究了一下 前向星,因为我的指针用的实在是很烂,所以还是 入赘 前向星吧. 问了学长,看了大牛们的博客,终于有点收获了,个人认为 前向星Very Well. 前向星 建图方法: 以储存边的方式来储存图.在构造图时,把边存放在数组里,不需使用指针,只需一个 next  即可是整个图构建完成 . 适用条件: 点集特别多的稀疏图,边数多且繁杂,开邻接矩阵会浪费大量内存. 时间复杂度: O(m),并不比邻接链表差. #include