二分图最大匹配
给出一个二分图,找出一个边数最大的匹配,任意边是没有公共点的。
如果所有点都是匹配点,则其是完美匹配。
增广路算法
未盖点:不与匹配边邻接的点,其他点为匹配点。
从未盖点出发,依次经过非匹配边、匹配边、非匹配边、匹配边…所得到的的路是交替路。
显然等价于 未盖点到匹配点到未盖点…
我们能够确定的是,未盖点连接的一定是匹配点。
如果终点是未盖点,说明是一条增广路,并且非匹配边比匹配边多一条。
增广路的作用是改进匹配,如果有增广陆,可以将非匹配边和匹配边互换。可以得到更优。
所以显然:一个匹配是不是最大匹配的充分必要条件是不存在增广路。(这个条件适合任意图
t e s t 1 test1 test1
无向图上, A A A和 B B B轮流操作, A A A先走,第一次可以挑一个点,以后每次把棋子移动到一个相邻点,并删除原来的点。不能移动则输。
如果有完美匹配,
A
A
A选择哪个点都是匹配点,
B
B
B可以找到一条匹配边走,到达另一个匹配点。无论
A
A
A怎么走。
A
A
A和
B
B
B选棋子的过程等价于选一对匹配出来。
A
A
A挑出一个点,
B
B
B一定有一条匹配边找到另一个点,然后相当于把这对匹配删除。显然
B
B
B赢。
否则
A
A
A赢。
任意求一个最大匹配,此时不存在增广路,并且一定有未盖点(不是完美匹配,
A
A
A选择了未盖点之后,每次都只能到达匹配点,但是由于
A
A
A先走,所以是
B
B
B先找到一个匹配点,
A
A
A再去匹配,所以
B
B
B能走,
A
A
A一定能走
增广路算法
选择一个未盖点做起点
u
u
u,选一条非匹配边到达
v
v
v,如果
v
v
v是非盖点,那么找到增广路,否则是匹配点,那么一定有匹配边走。然后继续找一条非匹配边。
如果一直没有未盖点,那么最后会扩展出一棵所谓的匈牙利树。
每次选择一个未盖点
d
f
s
dfs
dfs,如果找不到增广路,则换一个继续。并且从此以后不再从这里
d
f
s
dfs
dfs.
因为如果以后存在一个从
u
u
u出发的增广路,那么现在就找得到。【显然
二分图最佳完美匹配
假如有一个完全二分图
G
G
G,每条边有一个权值,如何求出权值和最大的完美匹配?
可行