标签:... 依次 一个 node 匈牙利算法 等价 这不 算法 匈牙利
证明:
充分性证明:如果一张图没有奇环,那么它可以黑白染色
考虑反证,如果它不能黑白染色,那么存在奇环
一定存在一条边\((u, v)\),使得\(u, v\)同时为白色
\((u, v)\)一定在环中,如果不在,考虑\(dfs\)构造,那么\((u, v)\)不可能是同一颜色
如果\((u, v)\)所在环是一个偶环,那么取反\(u\)后,原图合法,不符合无法染色的条件
因此,\((u, v)\)所在环一定是一个奇环
必要性证明:如果一张图可以黑白染色,那么它没有奇环
考虑逆否命题,如果它有奇环,那么它一定不能黑白染色
单独考虑这个奇环,设其中一点颜色为白,那么绕着奇环走一圈,会经过奇数条边回到它自身,此时它必须是黑色才能满足条件
这不可能,因此必要性成立
在匹配中的边称为匹配边,其余边称为非匹配边
和匹配边相邻匹配点,否则称为非匹配点
取反交错路后,匹配数不会变少
取反增广路后,匹配数会 + 1
(某大佬说它需要一个名字
证明:
考虑构造一个匹配\(M\),这个\(M\)中存在一个未匹配点\(u\),\(u\)没有增广路
假设这张图的一个最大匹配为\(M'\)
那么,如果\(u\)不在\(M'\)中,那么得证
如果\(u\)在\(M'\)中是匹配点,那么设\(u\)的匹配点为\(v\)
考虑\(v\),如果\(v\)的出边中有一条连向非匹配点,那么取反这条交错路,得证
否则,因为\(u\)在\(M\)中没有增广路,因此\(v\)在\(M\)中有匹配点\(u'\),且\(u'\)在\(M'\)中也是匹配点
考虑\(u'\),如果\(u'\)的出边中有非匹配点,那么存在增广路,\(M\)不是最大匹配
否则,考虑\(u'\)在\(M'\)中的匹配点\(v'\).....
依次类推
如果没有在中间找到一条交错路
由于\(u\)不存在增广路,因此最终停止的节点一定和\(u\)属于同一部分,记做\(u_1\)
但是在\(M'\)中,\(u\)到\(u_1\)形成了一条增广路,这不可能
因此,一定会在中间的过程中找到一条交错路,使得交错之后的最大匹配\(M_1\)不含\(u\)
证明:
必要性证明:如果原图为最大匹配,那么图上不存在增广路
如果有增广路,那么匹配可以+1,不符合最大匹配
充分性证明:如果图上不存在增广路,那么原图为最大匹配
对于所有的未匹配点而言,都找不到增广路,对它们依次使用增广路引理
最终,剩下的点只含匹配点,且根据增广路引理,它是最大匹配
根据增广路引理,我们知道:
如果从一个点出发找不到增广路,那么删除它仍然有最大匹配
因此,我们可以考虑对每个点依次尝试寻找增广路,如果一个点找到了增广路,那么最大匹配+1
bool dfs(int o) {
for(int i = cap[o]; i; i = nxt[i]) {
int cur = node[i];
if(!vis[cur]) {
vis[cur] = 1;
if(!mat[cur] || dfs(mst[cur]))
{ mat[cur] = o; return 1; }
}
}
return 0;
}
int Match() {
int ret = 0;
for(int i = 1; i <= n; i ++)
ret += dfs(i);
return ret;
}
标签:... 依次 一个 node 匈牙利算法 等价 这不 算法 匈牙利
原文地址:https://www.cnblogs.com/reverymoon/p/9738123.html