【笔记】图论选讲 2023.12.20

笔记 2023.12.20:图论问题选讲


还有几个题的题解(口胡)在路上了。

[EC Final 2019] Problem K. All Pair Maximum Flow

做法:每次找出边权最小的边 \(e\),满足 \(e\)恰好一侧是无界的,删去,在它所在的最小环 \(C\) 的其他边的边权加上 \(C\)。最终当图是一棵树时,可以乱做。

证明大概是证了:其实这个做法比较符合直觉,证明就记一下思路。

  • 最小割不经过 \(C\) 的边,或者经过 \(e\)\(C\) 的另外一条边。考虑对偶图,把无界区域划分成 \(n\) 份放到树上,具体不知道。

  • 然后通过最小割的性质和构造说明这样改不影响最大流。


刚才在讨论怎么 \(O(n\log n)\) 的时候发现证明比较重要。

平面图对偶图定理

平面图最小割等于对偶图最短路。

实际上这个定理说了和说了一样,含糊不清,我们来点图片:感谢 cjy 老师

如图,左边那个是平面图。将平面图的每一个面(包括有限面和无限面)当成点,两个面之间的边作为边,建立的图叫作对偶图。然后平面图上 \(s\to t\) 的最小割,是按照 \(\vec{s t}\) 这条直线把无限面切开以后两个无限面的代表点的最短路。可以看看第三幅图,虚线切开了无限面。

交了定义之后要证明原命题。观察到,平面图的每一个割都对应一个对偶图路径,最小割 \(\geq\) 最短路;对偶图的每一条路径都对应了平面图的一个割,可以感性理解一下就是这条路径把平面图劈开了,所以最短路 \(\geq\) 最小割。这么一看最小割 \(=\) 最短路就证完了。

性质一

对于一个包含边 \(e\) 的边数最小环 \(C\),其中 \(e\) 的边权 \(\leq\) (当前连通的)多边形中恰有一侧是无限面(注意表述)的边的边权。那么任意两点(假装是 \(s, t\))的最小割要么不经过 \(C\) 的边,要么经过 \(e\)\(C\) 的另外一条边。

证明。在对偶图上考虑。目测一下因为这个环没有把两个无限面包括进去,所以最短路确实只能是经过了零条或者两条 \(C\) 中的边(不能经过一条边吧,出不去;经过三条边也不优)。考虑为什么它一定能切 \(e\)

将多边形的每一个顶点向外引一条射线。\(s\) 引出的射线上方和 \(t\) 引出的射线上方交出的无限面是对偶图的起点,可以随意选择一块区域进入;\(s\) 引出的射线下方和 \(t\) 引出的射线下方交出的无限面是对偶图的终点,可以随意选择一块区域离开。

因为我没有数位板所以直接贺课件的图了,不是商用,希望图没事:

起点是那些黄色点里面选,终点是紫色点里面选,对偶图的边是绿色的,\(C\) 用红色标注。

然后必定经过 \(e\) 就显见了,直接钦定起点跨过 \(e\) 或者终点跨过 \(e\),注意这里的比较对象是蓝边,是说把第一步踩到的蓝边(加上红边)换成 \(e\) 是更优的,即使红边非常短也没有关系。就是右下角的图,原来是 \(x\to y\) 的,你把 \(x\) 搬到 \(v\) 区域内,就能踩到 \(e\) 了。

性质二

删除了多边形上的一条两侧恰好有一侧无界的边 \(e\),并将他的边权加到最小环上,删掉 \(e\),完了以后不影响两个点之间的最大流。

证明。

  1. 原图最小割 \(\geq\) 新图最小割。

    因为如果这个割与 \(C\) 无关,则这个割的大小相同。如果这个割经过 \(e\)\(C\) 的另一条边,则这个割因为改边权大小仍然相同。

  2. 新图最小割 \(\geq\) 原图最小割。

    设新图最小割为 \(E\)。如果 \(E\)\(C\) 无关,则大小相同。否则(注意这个 \(C\) 已经不是环,不能套用性质一),\(E\cup\{e\}\) 是原图的一个割,这个割比 \(E\) 小或者相同。

所以新图最小割 \(=\) 原图最小割。

details

你发现一旦我们知道树是什么了,可以马上建立 Kruskal 重构树计算答案,因为树上最小割是路径上最小边权,使用这条边作为最小边权的是 Kruskal 重构树上这条边的两个子树跨过去的点对。但是怎么求?

首先就是说找到多边形的最小的“两侧恰有一侧无界”的边 \(e\) 和它所在的最小环 \(C\)。将 \(C\) 上的边边权 \(+e\),然后删去 \(e\)。发现"两侧都无界"的边必然不在其它边的最小环上,也不会被拿出来切掉,所以 \(C\) 中除了两条对角线,其它的边(满足"两侧都无界")全部是加了 \(e\) 以后删掉。然后会有两条对角线成为新的“两侧恰有一侧无界”的边。

如果你真的这样写的话可能会爆炸,不如这样考虑,你建出定理一证明中的对偶图:

  1. 先建出这个对偶图,过程等价于划分多边形区域。随机一个点为一号点,然后随机选方向标号(哦题目标好了是吧),将对角线们的左右两端,强制左 \(<\) 右之后按照左排序,然后一个区域就是两条对角线中间的边和对角线了,这个图可以建。
  2. 维护一个 priority_queue 记了边权和边。初始时所有叶子到父亲的边加进去(叶子的父亲明显是它有唯一连边的点)。然后拿一个 \(e\) 出来,它是最小边,在它父亲 \(u\) 那里暴力枚举,除了 \(e\) 之外的边都 \(+e\),如果出点度数已经是一那么标记删掉,做个懒惰删除;如果度数不唯一,它也要拆掉,加入 \(u\) 到这个出点 \(v\) 的边,表示 \(u\to v\) 跨过的这条对角线已经成为边,以后可以作为 \(e\) 使用。
  3. 完了以后 Kruskal 重构树启动就完了。

QOJ5407 [CTT2020] 基础图论练习题

性质

对于一个强连通竞赛图,一定可以 \(O(n^2)\) 地找到一条哈密尔顿回路。

证明。考虑归纳,\(n=1\) 成立了,一般的 \(n\) 就考虑随意删掉一个点 \(x\),整张图分成 \(H_1, H_2, \cdots, H_k\)\(k\) 个强连通分量且不妨假设 \(x\)\(H_1\) 连边,\(H_k\)\(x\) 连边。这些 \(H\) 连成一个链状的偏序。根据归纳假设,我们首先从 \(x\) 走到 \(H_1\),然后在 \(H_1\) 中走哈密尔顿回路,走到 \(H_2\),……最后在 \(H_k\) 走回 \(x\)

做法

对原竞赛图缩点。连接两个强连通分量的边的影响是显见的。对于强连通分量内部,考虑跑一条哈密尔顿回路,不在上面的边不管。如果翻转回路上的边,那大家就拆散了,成了一条链,相当于给一条链,链上连了一些反向边,求强连通分量个数。相当于对反向边覆盖的边做区间加,问有多少个边没被覆盖,然后强连通分量个数就是边数加一。\(O(n^2)\) 次区间加,\(O(n)\) 次全局查询,差分,\(O(n^2)\)

CF1268D Invertation in Tournament

性质一

如果一个竞赛图是强连通图,等价于将出度序列排序后没有一个长度为 \(i<n\) 的前缀满足前缀和为 \(\binom i 2\)

性质二

对于一个 \(n\geq 4\) 个点强连通竞赛图,一定存在一个 \((n-1)\) 个点的导出子图是强连通的。

证明。考虑归纳,\(n=1\) 成立了,一般的 \(n\) 就考虑随意删掉一个点 \(x\),整张图分成 \(H_1, H_2, \cdots, H_k\)\(k\) 个强连通分量且不妨假设 \(x\)\(H_1\) 连边,\(H_k\)\(x\) 连边。这些 \(H\) 连成一个链状的偏序。世界线分裂,如果 \(k=1\) 那么完事;如果 \(|H_i|=1\),则 \(k\geq 3\),加入 \(x\) 删除 \(h_i\) 就行;如果存在 \(|H_i|\geq 4\),加入 \(x\) 删除 \(H_i\) 中一个点使得它还是强连通。

性质三

对于一个 \(n>6\) 的竞赛图,只需至多一次操作变成强连通。

证明。

  1. 缩点排成一条链。
  2. 如果有一个大小 \(\geq 4\) 的强连通分量,考虑随机选其中一个点反转方向,那么这个强连通分量还是强连通分量,然后它可以到达前面所有强连通分量,然后可以回去,到达后面所有强连通分量,最后回到刚才选的点。
  3. 如果有至少三个强连通分量,在中间的强连通分量中随机选取一个点反转,现在可能这个强连通分量分裂了但是没关系,它还是一条链加一个反点,通过这个反点可以遍历整张图。
  4. 如果不满足上面两种假设说明 \(n\leq 6\)

最终做法

对于 \(n\leq 6\) 暴力枚举方案判断;对于 \(n>6\) 暴力枚举点判断。判定可以对出度序列排序。\(O(n^2\log n)\)

UOJ176 新年的繁荣

boruvka 先启动一下。然后发现不会了。

考虑处理出两个数组 \(L, R\),值域是 \([0, 2^m)\)

\[L[x] = \min\{i\text{所在连通块编号}:1\leq i\leq n, x\subseteq a_i\} \]

\[R[x] = \max\{i\text{所在连通块编号}:1\leq i\leq n, x\subseteq a_i\} \]

做法是直接高维前缀和。注意是超集,别像我一样看成子集以后一去不复返

然后考虑给你一个 \(a_i\) 你怎么求 和他不在一个连通块内的点与它 bit-and 的最大值。非常简单,从高到低逐位考虑答案,假设答案是 \(b=a_i\& a_j\) 吧,那么必须要有 \(b\subseteq a_i\land b\subseteq a_j\)。第一个限制在遍历 \(a_i\) 的位时确定,如果犹豫不决,看一眼给 \(b\) 的这一位 \(t\) 赋值为 \(1\) 后是否存在 \(a_j\) 使得它不在连通块内,就看看 \([L[b+2^t], R[b+2^t]]\) 是否不等于 \(a_i\) 所在连通块编号就行了,如果不等于就能有 \(t\) 这一位。

\(O((m2^m+nm)\log n)\) 目测是对的。

MST and Rectangles

大力 boruvka + 扫描线。

注意这个题扫描线的时候线段树记下 \(\min\) 和不同于 \(\min\) 的颜色的 \(\min\) 就可以实现找到伸向连通块外的边(颜色的定义是连通块内的颜色相同)。然后因为这个建边的时候是 \(i<j\),你可能需要将这个矩形沿着 \(y=x\) 对称一下取个并,目测还是一个矩形。

posted @ 2023-12-20 14:43  caijianhong  阅读(52)  评论(0编辑  收藏  举报