图论算法杂谈
无向图 DFS 树
无向图 DFS 树不存在横叉边,只存在返祖边,这种良好的性质有很多用处。
CF1325F Ehab's Last Theorem
建出 DFS 树,首先假设存在点 \(x\) 及其返祖边 \((x,y)\) 满足 \(dep_x-dep_y+1\geq \lceil \sqrt{n} \rceil\),那么直接作为一个环输出即可。
否则每次选择一个叶子,并将与其有边相连的点删掉,由上可知这样的点个数 \(<\lceil \sqrt{n} \rceil\),那么一定能进行至少 \(\lceil \sqrt{n} \rceil\) 次这样的删除操作。
CF1391E Pairs of Pairs
设 \(d=\lceil \frac{n}{2} \rceil\)。
建出 DFS 树,如果深度 \(\geq d\),选择一条长度为 \(d\) 的竖直路径即可。
否则,因为不存在横叉边,故深度相同的点之间一定没有边,将深度的相同的点两两配对,那么不同深度的点对之间一定只有 \(\leq 2\) 条边,因为一层最多只有 \(1\) 个点不能被配对,故可以满足第二条要求。
CF1103C Johnny Solving
建出 DFS 树,如果深度 \(\geq \frac{n}{k}\) 直接选择一条到叶子的路径即可。
否则可以得出至少有 \(k\) 个叶子,并且每个叶子至少有两条返祖边,这两条边以及树边可以组成 \(3\) 个环,分类讨论即可发现一定有一个大小不为 \(3\) 的倍数,对每个叶子都选一个这样的环即可选出 \(k\) 个。
双联通分量
称两个点是点双连通的当且仅当任意两个点之间存在两条点不相交的路径。
称两个点是边双连通的当且仅当任意两个点之间存在两条边不相交的路径。
极大的点双、边双连通子集被称为点双、边双连通分量,简记为点双、边双。
如果删去一个点后,图被划分成两个非空的不连通的部分,那么这个点称为割点,同理定义割边(桥)。
用 tarjan 算法可以求出图中所有的点双、边双。
将每个边双缩成一个点后可以形成一棵树,树边是原图的割边。
由于一个点可以在多个点双内,故我们对于每个点双建立一个新点,称为方点,原图的点称为圆点,每个方点与其点双内的圆点连边可以形成一棵树,称为圆方树。
耳分解
对于一个无向图 \(G\),我们定义一个耳分解的过程如下:
-
初始时维护 \(G_0\) 为 \(G\) 中的一个简单环。
-
设当前图为 \(G'\),进行若干次扩张操作,每次向 \(G'\) 中加入一个耳,耳的定义为一条简单路径 \(x_1,x_2\dots x_k\),满足 \(x_1,x_k\in G',x_2,x_3\dots x_{k-1}\notin G'\),特别的若 \(x_1\neq x_k\) 称为一个开耳。
-
当 \(G'\) 的点集为全集时结束。
定理 1
无向图 \(G\) 可耳分解当且仅当其边双连通,可开耳分解当且仅当其点双连通。
定理 1 的证明
以边双为例,若其有割边则显然无法耳分解,另一方面我们可以构造一组耳分解:考虑图的 DFS 树,任选一个包含根的简单环作为 \(G_0\),每次选一个 \(x\) 满足 \(x\notin G',fa_x\in G'\),然后选择 \(x\) 的某个返祖边 \(y\),向 \(G'\) 中加入 \(fa_x\to x\to y\) 即可,根据边双连通性必然合法。
点双类似。

浙公网安备 33010602011771号