平面图对偶图

注意:博主并不会最小左转法!

什么是平面图:

如果能将一张图放到平面上并且边不相交,那么这张图就被称为平面图,比较常见的平面图就是网格图。

像这张图就是平面图:

但是这张图就不是平面图:

这条红边放到外面也会和 (1,4)(1,4) 这条边相交。

关于平面图的一些概念:

  • 有限面:一张平面图将一个平面分成了很多个部分,面积是有限的部分被称为有限面。
  • 无限面:同上,面积无限的部分被称为无限面。

比如这张图,面 2,3,42,3,4 都是有限面,而面 11 是无限面。

  • 欧拉公式:点数边数+面数=2\text{点数}-\text{边数}+\text{面数}=2
  • 常用性质:对于 n3n \ge 3 的联通简单平面图,有 m3n6m \le 3\cdot n-6,其中 nn 是点数,mm 是边数。

什么是对偶图:

有源汇:将源点和汇点用另一条边链接,将每个面看成点,两个相邻的面连边,边权是邻边的权值。

比如这张图:(设源点为 11,汇点为 55

它的对偶图就是:

新图中源点为 11,汇点为 66。(因为这里多加了一条红边,所以有可能加不了,然后就寄了,但是一般题目都是用网格图,所以没啥事)

对偶图有非常神奇的性质:将每一条从源点到汇点的路径对应着一个割,至于为什么,大概就是你将经过的边全部割掉,对偶图上 SSTT 就连通了,说明除了我加的红边之外没有路径能从平面图上的 SSTT 了。

根据这个性质我们就能优化一些东西。

无源汇:只要不加上面那张图的红边就好了,割就是一个经过无限面的环。

若图为有向图,不难发现原图上的边权对应的是逆时针旋转 9090^{\circ} 的边权,比如上面那张图,平面图上边 (1,3)(1,3) 对应的就是对偶图上的 (4,6)(4,6),而 (3,1)(3,1) 则是 (6,4)(6,4)

例题:

代码都在这里

洛谷 P4001 [ICPC-Beijing 2006] 狼抓兔子

这玩意就是一个最小割,但是直接流复杂度是 O(n6)O(n^6)虽然能过,我谔谔

首先这个图显然是平面图,题目又是让求最小割,考虑转成对偶图,对偶图上从起点到终点每一条路径都是一个割,所以最小割就是最短路,然后跑最短路就没了。(

洛谷 P3209 [HNOI2010] 平面图判定

首先发现边有那么多根本没用,mm 大于 3n63\cdot n-6 的直接输出 NONO 就好了。

将一条边拆成两个点,一个为这条边放到环内部,一个为这条边放到环外部,枚举两条边 i,ji,j ,若他们能放到同一侧就不连边,否则就将 ii 的放在环内部点和 jj 的放在环外部点连起来,将 ii 的放在环外部点和 jj 的放在环内部点连起来,因为边是无向边,所以直接并查集就好了,不用 2-sat\text{2-sat}(这个处理的是有向图)。

这样时间复杂度就是 O(Tn2)O(Tn^2) 的,可以通过,注意判相交的细节。

洛谷 P2046 [NOI2010] 海拔

发现我走太高并不优,这样只会徒加贡献,所以每个点高度只可能是 0,10,1,思考一下发现高度为 00 的和高度为 11 的一定是一个连通块,因为你考虑一个点周围高度全是 11,只有他是 00,不如直接把他高度也变成 11,这样一定不劣。

现在题目就被转化的很简单了,现在就等于给每个点求一个高度,使得对于每一条从起点到终点的路径高度变化且只变化一次,也就是我们将所有左右高度不一样的边割掉,起点终点不连通,现在我们就转化成了最小割了,建对偶图直接跑就行了。

洛谷 P7916 [CSP-S 2021] 交通规划

首先先思考一下 k=2k=2 怎么做,不难发现这个跟上面那个海拔是一毛一样的,就是将白点看成高度为 00,黑点看成高度为 11

考虑怎么推广这个东西,首先有一个很暴力的直接优化,就是直接在原图上跑最小割,拼上上面的 k=2k=2,这样就可以得到 80pts80pts 了。

其实还有一个 k=3k=3,这个也挺有用的。(但是部分分没给)

因为流没有前途,所以还是从对偶图角度考虑。

不难发现一定有两个颜色相同,并且他俩一定相邻,就比如说下图:

假设原图是黄框,我们把黑色附加点看成红色点,白色附加点看成蓝色点,现在我们把网格图向外扩充一圈,现在将图标号,最外层的编号是按绿线分割的,编号完也就是下图:(其实上面的文字解释我自己都看不懂

考虑怎么将红蓝点断开,不难发现就是让 1,21,2 成为对偶图源汇点。

同理,如果有很多红点很多蓝点,但是所有红点都相邻,也可以让”左边和红点相邻,右边和蓝点相邻“的面作为源点,让“左边和蓝点相邻,右边和红点相邻“(这里的左右都是按照射线编号顺序编号的左右,例如上图中的 22 为到达面,这个不是肉眼看的左右)的面作为汇点直接跑最短路。

正解:

现在你什么性质都没有了😔,但是不难从上面的得出,我要是相同颜色的点相邻是没有任何用的(同 k=3k=3,所以下面不考虑这种情况),我们定义”左边和红点相邻,右边和蓝点相邻“的面为出发面,”左边和蓝点相邻,右边和红点相邻“的面为到达面,首先这两种面的数量肯定一样,考虑我们给他们配对,还是按题目中给的射线编号顺序方法给所有出发面到达面重标号,假设我们将编号为 ll 的面和编号为 rr 的面匹配(这里要求两个面不是同一种面),不妨假设 ll 为出发面,我们直接跑从 llrr 的最短路,然后把所有最短路上的边割掉,发现这个操作使得 l,rl,r 内所有的蓝点都到达不了这个 ll 左边相邻的红点了,就比如下图:

你的 ll 是右上角的红点到右上角的蓝点,rr 是左下角的蓝点到右边的另一个红点,你这样建图不会像橙边这样割,因为上面那个蓝点还是能到达右上角的红点,但是可以像粉边这样割,然后你发现你这样分出来的一定是正确的,因为你考虑一个 1,41,42,32,3 的配对方法(下图),你在中间留的是一样颜色的点,割出去的是颜色一样的点,归纳一下就行了。

那么为什么这样配对找到的最小值一定是答案呢?

额,你发现这玩意好像就是和答案一一对应的。(最终答案中肯定没有卐的形状,怎么着都能断一些边)

然后发现你的配对方案和括号序列很像,不会相交(即出现 1,31,3 配对,2,42,4 配对这种情况),因为如果这样的话你 1,31,3 的最短路一定和 2,42,4 的最短路相交,相交是不优的,不如改成 1,21,2 配对,3,43,4 配对。

把这个段环成链,随便 dpdp 一下就好了。

fl,rf_{l,r} 表示将 [l,r][l,r] 匹配好的最小代价,转移有:

fl,r=min{fl+1,r1+disl,r,mink=lr{fl,k+fk+1,r}}f_{l,r}=\min\{f_{l+1,r-1}+dis_{l,r},\min\limits_{k=l}^{r}\{f_{l,k}+f_{k+1,r}\}\},其中 disl,rdis_{l,r} 为上面所说的让 l,rl,r 匹配,两点间的最短路。

参考链接:平面图的基本概念及性质 - Rogn - 博客园


平面图对偶图
http://lnyxqwq.github.io/2023/08/15/平面图对偶图/
作者
lnyx
发布于
2023年8月15日
许可协议