xiaoguozi's Blog
Pay it forword - 我并不觉的自豪,我所尝试的事情都失败了······习惯原本生活的人不容易改变,就算现状很糟,他们也很难改变,在过程中,他们还是放弃了······他们一放弃,大家就都是输家······让爱传出去,很困难,也无法预料,人们需要更细心的观察别人,要随时注意才能保护别人,因为他们未必知道自己要什么·····
计算二分图的算法有网络流算法和匈牙利算法(目前就知道这两种),其中匈牙利算法是比较巧妙的,具体过程如下(转自组合数学):

令g
=(x,*,y)是一个二分图,其中x={x1,x2},y={y1,y2,.}.令m为g中的任意匹配。 

1。将x的所有不与m的边关联的顶点表上¥,并称所有的顶点为未扫描的。转到2。 

2。如果在上一步没有新的标记加到x的顶点上,则停,否则 ,转3 

3。当存在x被标记但未被扫描的顶点时,选择一个被标记但未被扫描的x的顶点,比如xi,用(xi)标 

记y 的所有顶点,这些顶点被不属于m且尚未标记的边连到xi。 

 现在顶点xi 是被扫描的。如果不存在被标记但未被扫描的顶点,转4。 

4。如果在步骤3没有新的标记被标记到y的顶点上,则停,否则转5。 

5。当存在y被标记但未被扫描的顶点时。选择y的一个被标记但未被扫描的顶点,比如yj, 

用(yj)标记x的顶点,这些顶点被属于m且尚未标记的边连到yj。现在,顶点yj是被扫描的。 

如果不存在被标记但未被扫描的顶点则转道2。 

由于每一个顶点最多被标记一次且由于每一个顶点最多被扫描一次,本匹配算法在有限步内终止。
匈牙利算法思想:
今天刚看了二分匹配..以前的没怎么好好想过,今天看了下,其实很简单..就是不断找增广路
过程...有x,y两个集合,对x这个集合每个点遍历一遍,遍历当前点时,如果y中有个未匹配的点
,直接跳出,ans++,如果在y中所有和x的点都匹配过,则对这些点再找,如果有其他的路,则
更新,ans++,如果没,则把当前的点置为匹配的点,ans不变..x++;

相关题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1151
http://acm.hdu.edu.cn/showproblem.php?pid=1068
http://acm.hdu.edu.cn/showproblem.php?pid=1150
http://acm.hdu.edu.cn/showproblem.php?pid=1281
http://acm.hdu.edu.cn/showproblem.php?pid=1498
http://acm.hdu.edu.cn/showproblem.php?pid=1528
http://acm.hdu.edu.cn/showproblem.php?pid=1507
相关知识:
二分图的最小顶点覆盖=二分图的最大匹配数
二分图的最大独立集=顶点数-二分图的最大匹配数
二分图的最小路径覆盖=顶点数-二分图的最大匹配数
posted on 2008-07-31 15:56 小果子 阅读(688) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理