码迷,mamicode.com
首页 > 其他好文 > 详细

图论知识记录

时间:2018-10-03 00:40:32      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:...   依次   一个   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!