Solution - ARC152D Halftree

首先 n 为偶数时无解,这是显然的,因为一次加两条边,总边数一定是偶数。

下面我们证明 n 为奇数时一定有解,直接进行构造。

首先将每一个点编号加上 k 再模 n 的答案求出,将其两两连边可以得到 gcd(n,k) 个置换环,设这个值是 d,每个环内部的大小相等,为 nd,我们钦定每个置换环中的最小的数位第一个,下面是 n=15k=6 的情况,其中每一行表示一个置换环:

0,6,12,3, 9
1,7,13,4,10
2,8,14,5,11

下文用 ai,j 表示上述表格中第 i 行第 j 列的元素。

首先我们先将前 nd1 列连成一个连通块,具体地我们构造 (a1,i,a2,i),(a2,i,a3,i),(ad1,i,ad,i),其中 i 是奇数即可。

接下来我们将前 nd1 个连通块连通,要想做到这一点我们会同时将最后一列的某一个元素连通,具体地我们构造 (a1,1,a1,2),(a1,3,a1,4),,(a1,n/d2,a1,n/d1) 即可。

最后一步,我们需要将最后一列的 d1 个孤点连通,具体地我们构造 (a2,n/d,a3,n/d1),(a4,n/d,a5,n/d1),,(ad1,n/d,ad,n/d1) 即可。

总时间复杂度线性。

posted @   cnyz  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示