P5292 [HNOI2019 D2T1]校园旅行 题解

Description

传送门

Solution

真是只神题啊。

算法一

首先考虑一个 O ( m 2 ) O(m^2) O(m2) 的算法。

f i , j f_{i,j} fi,j 表示,是否存在一条以 i i i 为起点,以 j j j 为终点的标号回文路径。

转移式子非常显然。若 f i , j = 1 f_{i,j}=1 fi,j=1,且存在边 ( u , i ) ( v , j ) (u,i)(v,j) (u,i)(v,j) 使 u , v u,v u,v 的权值同奇同偶,那么 f u , v = 1 f_{u,v}=1 fu,v=1

使用 SPFA 进行转移即可。不难发现每一对原图上的边都对复杂度贡献了 O ( 1 ) O(1) O(1),且 SPFA 在本题中复杂度与边数线性相关,因此时间复杂度是 O ( m 2 ) O(m^2) O(m2)

算法二

注意到,我们其实只关心首尾每一对极长 01 01 01 段的奇偶性。例如,某条路径上的权值依次为 00011110 00011110 00011110,那么可以通过在某条边上多次徘徊将其变为回文串 0001111000 0001111000 0001111000

考虑将原图中的某些没用的边去掉(即这些边无法改变奇偶性),将 m m m 缩减到 O ( n ) O(n) O(n) 的级别。此时套用算法一中的 dp \text{dp} dp 就足以通过了。

将边分为同色边(即边两端的节点权值相同)以及异色边两类。

对于前者,我们考虑每一个同色边组成的连通块。若这个连通块是一张二分图,那么它就是个垃圾(两点间路径经过的点数的奇偶性确定),我们可以尝试破罐子破摔,在其 ⌈ \lceil 连通且垃圾 ⌋ \rfloor 的前提下使其边数最小——不难想到保留它的一棵生成树。若这张连通块不是二分图,那么它很优秀,于是可以在其 ⌈ \lceil 连通且优秀 ⌋ \rfloor 的前提下使其边数最小——不难想到保留它的一个生成树并在某个节点处加一个自环

对于后者呢?不难发现,对于每个异色边组成的连通块都是个二分图,所以对于这些垃圾全部保留生成树即可。

边数为 O ( n ) O(n) O(n) 级别,总复杂度 O ( n 2 ) O(n^2) O(n2),本题被解决。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值