(匈牙利模板)二分图匹配-poj-2226

来源:互联网 发布:plu直播软件 编辑:程序博客网 时间:2024/06/04 20:00


匈牙利算法

用于二分图最大匹配。



步骤:

1、这是待匹配的二分图。

2、开始匹配第一个A1,随便匹配第一个B1,肯定会成功的啦。然后匹配左边第二个A2,发现匹配不成功。

3、于是B1断开原有连接,让原有的左边A1去找下一个匹配,发现下一个匹配成功。

4、然后匹配A3,发现B1已经连接,那就断开原有连接。但是断开原有连接,发现A2匹配失败了,于是A3继续匹配下一个,发现匹配成功。

5、接下来匹配A4.





这就是匈牙利算法,我跑了题目大概是32ms。

或者是建立一个超级源和一个超级汇。跑最大流求二分图最大匹配,大概是16ms。

匈牙利模板:





然后讲一下poj2226

题意:有一片N×M的草地,上面有一些方格有泥巴,现在需要横横竖竖放一些任意长度的木条,但不能铺在草地只能铺在木板上,木板可以被其他木板覆盖,问最少需要几条木板。


解法:对于每一个泥巴方块,要么是被横木板覆盖,要么是被竖着的木板覆盖。

把每一段横着的连续条条看作一个顶点,把每一段竖着的连续条条看作一个顶点,如果横着的条条和竖着的条条有交点,那么就从一个顶点到另一个顶点连一条边,每一次连的边和泥巴方块是一一对应的。所以现在的问题就变成,求这个二分图的最小点覆盖数。由二分图公式:最小点覆盖数(设有一个有n个顶点的集合S,图中任意一条边都有至少一个顶点属于这个集合。PS:也有可能一条边的两个点都属于这个集合)=最大匹配数,即可知只要求最大匹配就OK。








0 0
原创粉丝点击