一张图 由点集 和边集 构成。我们用 代表节点 的度数,如果 ,则称 为支配点。如果每个点的度数都是 ,则该图为 正则图。
子图
对一张图 ,若存在另一张图 满足 且 ,则称 是 的子图,记作 。
若对 ,满足 ,只要 ,均有 ,则称 是 的导出子图。点集为 的导出子图称为 导出的子图,记作 。
若 满足 ,则称 为 的生成子图/支撑子图。
如果一张无向图 的某个生成子图 为 正则图,则称 为 的一个 因子。
如果有向图 的导出子图 满足 ,有 ,则称 为 的一个闭合子图。也就是说,图内部是闭合的,不存在一个点在导出子图内,可以通过原图的一条边连到一个不在导出子图内的点。
特殊的图
对于无向简单图,所有本来在图上的边都不在,本来不在的都在,那么这个图就是原无向图的补图。
对于有向图,每条边的方向取反,得到的图就是原图的反图。
特殊集合
一些特殊的点和边的集合有着特殊的意义,这里我们介绍一些常见的。
支配集
对于无向图,如果一个点集的点可以连接到原图的所有点,那么这个点集为原图的支配集。
最小支配集是 NPH 的,我们通常使用 的枚举算法来求解支配集。
独立集
就是任意两点不相邻的点集。对于树和二分图我们有高效做法,但是一般图上,这个问题是 NPH 的。
匹配
对于图 ,若 且 中任意两条边都没有公共端点,且 中没有自环,那么 是 的一个匹配,也称为边独立集。如果一个点被匹配的边连接了,那么它就是被匹配的,否则就是不被匹配的。
边数最多的称为最大匹配,如果边带权,那么权重之和最大的匹配称为图的最大权匹配。
如果一个匹配在加入任何一条边后都不再是一个匹配,那么这个匹配就是极大匹配,最大匹配一定是极大匹配。
如果所有点都被匹配了,那么这个匹配是完美匹配。如果在一个匹配中只有一个点不被匹配,那么该匹配为准完美匹配。
对于一个匹配 ,若一条路径以非匹配点为起点,每相邻两条边中的一条在匹配中而另一条不在匹配中,那么这条路径称为交替路径;一条非匹配点终止的交替路径称为增广路径。
点覆盖
如果所有边都至少有一个端点在这个点集中,那么这个点集被称为点覆盖集。
点覆盖集一定是支配集,但是极小点覆盖集不一定是极小支配集(考虑一个三元环)。
点覆盖集拥有以下性质:
- 一个点集是点覆盖的充要条件是其补集是独立集。
- 一张图的任何一个匹配的大小都不超过其任何一个点覆盖的大小。
边覆盖
当前边集满足任何一个点都至少是其中一条边的一个端点,那么这个边集称为边覆盖集。
如果知道了最大匹配,那么将所有非匹配点都连一条边加入最大匹配,那么就得到了一个最小边覆盖。同理,如果知道了最小边覆盖,那么将有公共点的边删去到只剩一条就得到了最大匹配。
团
一个图的子点集 中任意两个不同的顶点都相邻,则称 是图 的一个团。团对应的导出子图是完全图。说白了最大团就是最大完全子图。
求解一个图的最大团是 NPH 的,可以使用最大团搜索算法(在暴力枚举的基础上加一个不可能成为答案的最优性剪枝)来解决规模较小的图的问题。
例题
你可能会问:这里为什么有题呢?嗯,主要是建立在图结构上的一些奇奇怪怪的问题。
[CF1810E] Monsters
如果直接做的话,考虑一个被一个大点分割成两部分的图,这样左半部分和右半部分都是跑满的。
但实际上,如果一个出生点可以从另一个出生点走过来,那么这个出生点就没必要重新计算了。我直觉感觉这玩意儿是 的,但是这不对。
设 表示 为出生点可以走到的点集。假设 ,而且 ,那么 能够走到 但是 不能走到 。以中间那个阻止 继续前进的点分割, 必然有不小于 的规模,因此 。因此任意一个点最多只会被计算 个有效出生点计算到。证得 。代码。