点覆盖、最小点覆盖
- 点覆盖集即一个点集,使得所有边至少有一个端点在集合里。或者说是“点” 覆盖了所有“边”。。极小点覆盖(minimal vertex covering):本身为点覆盖,其真子集都不是。最小点覆盖(minimum vertex covering):点最少的点覆盖。点覆盖数(vertex covering number):最小点覆盖的点数。
边覆盖、极小边覆盖
- 边覆盖集即一个边集,使得所有点都与集合里的边邻接。或者说是“边” 覆盖了所有“点”。极小边覆盖(minimal edge covering):本身是边覆盖,其真子集都不是。最小边覆盖(minimum edge covering):边最少的边覆盖。边覆盖数(edge covering number):最小边覆盖的边数。
独立集、极大独立集
- 独立集即一个点集,集合中任两个结点不相邻,则称V为独立集。或者说是导出的子图是零图(没有边)的点集。极大独立集(maximal independent set):本身为独立集,再加入任何点都不是。最大独立集(maximum independent set):点最多的独立集。独立数(independent number):最大独立集的点。
团
- 团即一个点集,集合中任两个结点相邻。或者说是导出的子图是完全图的点集。极大团(maximal clique):本身为团,再加入任何点都不是。最大团(maximum clique):点最多的团。团数(clique number):最大团的点数。
边独立集、极大边独立集
- 边独立集即一个边集,满足边集中的任两边不邻接。极大边独立集(maximal edge independent set):本身为边独立集,再加入任何边都不是。最大边独立集(maximum edge independent set):边最多的边独立集。边独立数(edge independent number):最大边独立集的边数。
边独立集又称匹配(matching),相应的有极大匹配(maximal matching),最大匹配(maximum matching),匹配数(matching number)。
支配集、极小支配集
- 支配集即一个点集,使得所有其他点至少有一个相邻点在集合里。或者说是一部分的“点”支配了所有“点”。极小支配集(minimal dominating set):本身为支配集,其真子集都不是。最小支配集(minimum dominating set):点最少的支配集。支配数(dominating number):最小支配集的点数。
边支配集、极小边支配集
- 边支配集即一个边集,使得所有边至少有一条邻接边在集合里。或者说是一部分的“边”支配了所有“边”。极小边支配集(minimal edge dominating set):本身是边支配集,其真子集都不是。最小边支配集(minimum edge dominating set):边最少的边支配集。边支配数(edge dominating number):最小边支配集的边数。
最小路径覆盖
- 最小路径覆盖(path covering):是“路径” 覆盖“点”,即用尽量少的不相交简单路径覆盖有向无环图G的所有顶点,即每个顶点严格属于一条路径。路径的长度可能为0(单个点)。
- 最小路径覆盖数=G的点数-最小路径覆盖中的边数。应该使得最小路径覆盖中的边数尽量多,但是又不能让两条边在同一个顶点相交。拆点:将每一个顶点i拆成两个顶点Xi和Yi。然后根据原图中边的信息,从X部往Y部引边。所有边的方向都是由X部到Y部。因此,所转化出的二分图的最大匹配数则是原图G中最小路径覆盖上的边数。因此由最小路径覆盖数=原图G的顶点数-二分图的最大匹配数便可以得解。
匹配
- 匹配(matching)是一个边集,满足边集中的边两两不邻接。匹配又称边独立集(edge independent set)。
- 在匹配中的点称为匹配点(matched vertex)或饱和点;反之,称为未匹配点(unmatched vertex)或未饱和点。
- 交错轨(alternating path)是图的一条简单路径,满足任意相邻的两条边,一条在匹配内,一条不在匹配内。
- 增广轨(augmenting path):是一个始点与终点都为未匹配点的交错轨。
- 最大匹配(maximum matching)是具有最多边的匹配。
- 匹配数(matching number)是最大匹配的大小。
- 完美匹配(perfect matching)是匹配了所有点的匹配。
- 完备匹配(complete matching)是匹配了二分图较小集合(二分图X,Y中小的那个)的所有点的匹配。
- 增广轨定理:一个匹配是最大匹配当且仅当没有增广轨。
- 所有匹配算法都是基于增广轨定理:一个匹配是最大匹配当且仅当没有增广轨。这个定理适用于任意图。
二分图的性质
- 二分图中,点覆盖数是匹配数。
- 二分图的最大匹配数等于最小覆盖数,即求最少的点使得每条边都至少和其中的一个点相关联,很显然直接取最大匹配的一段节点即可。
- 二分图的独立数等于顶点数减去最大匹配数,很显然的把最大匹配两端的点都从顶点集中去掉这个时候剩余的点是独立集,这是|V|-2*|M|,同时必然可以从每条匹配边的两端取一个点加入独立集并且保持其独立集性质。
- DAG的最小路径覆盖,将每个点拆点后作最大匹配,结果为n-m,求具体路径的时候顺着匹配边走就可以,匹配边i→j’,j→k’,k→l’….构成一条有向路径。
- 最大匹配数=左边匹配点+右边未匹配点。因为在最大匹配集中的任意一条边,如果他的左边没标记,右边被标记了,那么我们就可找到一条新的增广路,所以每一条边都至少被一个点覆盖。
- 最小边覆盖=图中点的个数-最大匹配数=最大独立集。
二分图的判定
- 二分图是这样一个图: 有两顶点集且图中每条边的的两个顶点分别位于两个顶点集中,每个顶点集中没有边直接相连接!
- 无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。
- 判断二分图的常见方法是染色法: 开始对任意一未染色的顶点染色,之后判断其相邻的顶点中,若未染色则将其染上和相邻顶点不同的颜色, 若已经染色且颜色和相邻顶点的颜色相同则说明不是二分图,若颜色不同则继续判断,bfs和dfs可以搞定!
- 易知:任何无回路的的图均是二分图。
二分图的应用模型
- 二分图的最大匹配:
- 0要素:左右每个集合中包含0条边
- 1要素:每个点只能被一个匹配覆盖
- 二分图的最小点覆盖:
- 选出最少的点组成集合,使所有的边都至少有一个端点在集合中
- 2要素:每条边有两个端点,至少选择一个端点
- 最小点覆盖数等于最大匹配数
- 二分图最大独立集:
- 在任意两点之间都没有边相连的情况下选出最多的点
- 最大独立集=n-最大匹配
- 二分图最大团:
- 任意两点之间都有一条边相连的情况下选出最多的点
- 二分图G的最大团等于其补图G’的最大独立集。
- 补图转化思想极为重要,在一些题中能称为解答的突破口
- DAG最小路径点覆盖:
- 用最少的不相交的简单路径覆盖所有的点(即每个点只能被覆盖一次)
- 建一张新图,1~n节点作为二分图左部点,n+1~2n作为右部点,对原图每条边(x,y),从x到y+n连一条边。
- 最小路径点覆盖=n-新图最大匹配数
- DAG最小路径可重复点覆盖:
- 用最少的可相交的简单路径覆盖所有的点(即每个点可被覆盖多次)
- 也可用于解决:在DAG中,求出最多的点数,满足点之间两两不连通
- 先对DAG传递闭包,然后求最小路径点覆盖。
- 二分图最大匹配的必经边和可行边:
- 给二分图添加源点与左部所有节点相连,汇点与右部所有节点相连,每条无向边拆成两条有向边。
- 先用最大流找出任意一组最大匹配,此时:
- 必经边:(x,y)的流量为1,并且在残量网络上属于不同的强连通分量
- 可行边:(x,y)的流量为1,或者在残量网络上属于不同的强连通分量
- dinic求最大流,tarjan求强连通分量,最后对边逐一进行判定,时间复杂度为O(E*sqrt(N+M))