【笔记】图论选讲 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\),完了以后不影响两个点之间的最大流。
证明。
-
原图最小割 \(\geq\) 新图最小割。
因为如果这个割与 \(C\) 无关,则这个割的大小相同。如果这个割经过 \(e\) 和 \(C\) 的另一条边,则这个割因为改边权大小仍然相同。
-
新图最小割 \(\geq\) 原图最小割。
设新图最小割为 \(E\)。如果 \(E\) 和 \(C\) 无关,则大小相同。否则(注意这个 \(C\) 已经不是环,不能套用性质一),\(E\cup\{e\}\) 是原图的一个割,这个割比 \(E\) 小或者相同。
所以新图最小割 \(=\) 原图最小割。
details
你发现一旦我们知道树是什么了,可以马上建立 Kruskal 重构树计算答案,因为树上最小割是路径上最小边权,使用这条边作为最小边权的是 Kruskal 重构树上这条边的两个子树跨过去的点对。但是怎么求?
首先就是说找到多边形的最小的“两侧恰有一侧无界”的边 \(e\) 和它所在的最小环 \(C\)。将 \(C\) 上的边边权 \(+e\),然后删去 \(e\)。发现"两侧都无界"的边必然不在其它边的最小环上,也不会被拿出来切掉,所以 \(C\) 中除了两条对角线,其它的边(满足"两侧都无界")全部是加了 \(e\) 以后删掉。然后会有两条对角线成为新的“两侧恰有一侧无界”的边。
如果你真的这样写的话可能会爆炸,不如这样考虑,你建出定理一证明中的对偶图:
- 先建出这个对偶图,过程等价于划分多边形区域。
随机一个点为一号点,然后随机选方向标号(哦题目标好了是吧),将对角线们的左右两端,强制左 \(<\) 右之后按照左排序,然后一个区域就是两条对角线中间的边和对角线了,这个图可以建。 - 维护一个
priority_queue
记了边权和边。初始时所有叶子到父亲的边加进去(叶子的父亲明显是它有唯一连边的点)。然后拿一个 \(e\) 出来,它是最小边,在它父亲 \(u\) 那里暴力枚举,除了 \(e\) 之外的边都 \(+e\),如果出点度数已经是一那么标记删掉,做个懒惰删除;如果度数不唯一,它也要拆掉,加入 \(u\) 到这个出点 \(v\) 的边,表示 \(u\to v\) 跨过的这条对角线已经成为边,以后可以作为 \(e\) 使用。 - 完了以后 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\) 的竞赛图,只需至多一次操作变成强连通。
证明。
- 缩点排成一条链。
- 如果有一个大小 \(\geq 4\) 的强连通分量,考虑随机选其中一个点反转方向,那么这个强连通分量还是强连通分量,然后它可以到达前面所有强连通分量,然后可以回去,到达后面所有强连通分量,最后回到刚才选的点。
- 如果有至少三个强连通分量,在中间的强连通分量中随机选取一个点反转,现在可能这个强连通分量分裂了但是没关系,它还是一条链加一个反点,通过这个反点可以遍历整张图。
- 如果不满足上面两种假设说明 \(n\leq 6\)。
最终做法
对于 \(n\leq 6\) 暴力枚举方案判断;对于 \(n>6\) 暴力枚举点判断。判定可以对出度序列排序。\(O(n^2\log n)\)。
UOJ176 新年的繁荣
boruvka 先启动一下。然后发现不会了。
考虑处理出两个数组 \(L, R\),值域是 \([0, 2^m)\):
做法是直接高维前缀和。注意是超集,别像我一样看成子集以后一去不复返。
然后考虑给你一个 \(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\) 对称一下取个并,目测还是一个矩形。
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/17916496.html