【AGC035E】Develop(图论,DP)

本文探讨了如何通过构造图G来判断集合S是否合法,关键在于分析奇偶链和偶链,以及环的存在条件。对于奇数k,环的特殊结构被详细揭示,利用动态规划解决环的避免问题,时间复杂度为O(nk^2)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于某个集合 S⊆{1,⋯ ,n}S\subseteq\{1,\cdots,n\}S{1,,n},考虑能不能删去 SSS

对于任意 x∈Sx\in SxS,连边 x→x−2x\to x-2xx2(如果 x−2∈Sx-2\in Sx2S)及 x→x+kx\to x+kxx+k(如果 x+k∈Sx+k\in Sx+kS),那么能把 SSS 删去当且仅当这张图是一个 DAG。

于是我们先对所有点都这么连边形成图 GGG,那么 SSS 合法当且仅当 SSSGGG 中的导出子图是个 DAG,即无环。

对于所有 x→x−2x\to x-2xx2 的边,它们形成了两条链,分别称为奇链和偶链。然后我们对 kkk 的奇偶性分类讨论:若 kkk 是偶数,那么这两条链是不连通的(独立的),而无环相当于要求每条链中不连续选 k/2+1k/2+1k/2+1 个点,这个方案数很好统计(注意数据范围不大,暴力 DP 即可)。

kkk 是奇数,情况就复杂些。首先,若出现了环,那么一定经过了正偶数条 x→x+kx\to x+kxx+k 的边(经过一次会改变一次当前点的奇偶性)。接下来我们证明,一个简单环必定只经过了恰好 222x→x+kx\to x+kxx+k 的边。

对于任意一个简单环 CCC,取其编号最小的点 aaa,那么环中 aaa 的上一个点一定是 a+2a+2a+2,下一个点一定是 a+ka+ka+k(记为 bbb)。而且我们发现,对于 a,a+2,⋯ ,b−1a,a+2,\cdots,b-1a,a+2,,b1 中的任意一个点 xxxxxx 在环中都不可能是 +k+k+k 得到的(否则 aaa 不是最小点),于是我们已经可以确定 CCC 的一部分形态,如上图左上。

接着,bbb 在环中接下来肯定是先走若干步 −2-22(可以是 000 步,但不能超过 aaa)走到 ccc,然后再走一步 +k+k+k 走到 ddd,如上图左下。

接着,如上图右,我们又继续考虑 e=b+1e=b+1e=b+1 这个点是从哪来的,若它是 +k+k+k 得到的,那么就必然要经历从 b−1,bb-1,bb1,b 右侧到 b−1,bb-1,bb1,b 左侧的过程(从 ddd 经过若干步到达 a+1a+1a+1),这个过程中一定会再次经过 b−1,bb-1,bb1,b 中的某一个点,这就与该环是简单环矛盾了。从而,eee 是从 e+2e+2e+2 来的。类似地,可以推出 b+1,b+3,⋯ ,d−2b+1,b+3,\cdots,d-2b+1,b+3,,d2 中的每一个点 xxx 都是从 x+2x+2x+2 来的,这就和 ddd 接起来了。

于是 CCC 只有可能是 a→一步+kb→若干步−2c→一步+kd→若干步−2aa\xrightarrow{\text{一步}+k}b\xrightarrow{\text{若干步}-2}c\xrightarrow{\text{一步}+k}d\xrightarrow{\text{若干步}-2}aa一步+kb若干步2c一步+kd若干步2a 的形态。

那么,现在限制改为了,SSSGGG 中的导出子图不能出现环,且该环恰经过两次 +k+k+k,如下图左上。

在这里插入图片描述

假设 SSS 已经选好了,怎么快速判断是否存在这样的环:可以从每个 SSS 中的奇数编号的点 xxx 开始,按如下方式找一条路径(称为 xxx 的找环路)并检查:

  • 找到最小的 yyy 使得 {y,y+2,⋯ ,x−2,x}⊆S\{y,y+2,\cdots,x-2,x\}\subseteq S{y,y+2,,x2,x}S

  • 找到最小的 zzz 使得 z∈{y,y+2,⋯ ,x−2,x}z\in\{y,y+2,\cdots,x-2,x\}z{y,y+2,,x2,x}z+k∈Sz+k\in Sz+kS。若找不到这样的 zzz 那么跳过从 xxx 开始的检查。

  • 找到最小的 www 使得 {w,w+2,⋯ ,z+k−2,z+k}⊆S\{w,w+2,\cdots,z+k-2,z+k\}\subseteq S{w,w+2,,z+k2,z+k}S

  • 考虑路径 P=x→x−2→⋯→z→z+k→z+k−2→⋯→wP=x\to x-2\to \cdots\to z\to z+k\to z+k-2\to \cdots\to wP=xx2zz+kz+k2w,若 PPP 长度大于等于 k+2k+2k+2,那么我们就找到了一个环。

如上图左下,图中的红蓝两条路径就是从两个不同的 xxx 开始的找环路。

容易证明,按照上述方式,若找不到任何一个环,那么图中就确实不存在环(因为从我们所述的 zzz 跳到 z+kz+kz+k,是能使得 PPP 的长度尽量大的)。

那么考虑 DP。如上图右,设 fi,ℓ1,ℓ2f_{i,\ell_1,\ell_2}fi,1,2 表示考虑完 [1,i][1,i][1,i] 中的奇数点和 [1,i+k][1,i+k][1,i+k] 中的偶数点,其中从 iii 开始的找环路经过的点数为 ℓ1\ell_11,而从 i+ki+ki+k 开始不断 −2-22 所能经过的点的个数为 ℓ2\ell_22 的方案数。

转移的时候,考虑从 i+2i+2i+2 开始的找环路(假设 i+2∈Si+2\in Si+2S):若 i∈Si\in SiS 且存在从 iii 开始的找环路,那么从 ℓ1\ell_11 转移过来;否则从 ℓ2\ell_22 转移过来。转移是 O(1)O(1)O(1) 的。

时间复杂度 O(nk2)O(nk^2)O(nk2),注意 DP 时若 ℓ2>k+2\ell_2> k+22>k+2 我们可以直接把它看做 k+2k+2k+2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值