专栏文章

题解 CF2165D Path Split

CF2165D题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min1iogm
此快照首次捕获于
2025/12/01 19:02
3 个月前
此快照最后确认于
2025/12/01 19:02
3 个月前
查看原文

题解 CF2165D Path Split

题意

给定长度为 nn 的序列 aa,求最少将其划分为多少个子序列,使得划分出的每个子序列中相邻两项之差的绝对值均为 11
数据范围:多测,n106\sum n\le 10^6,值域 [1,2n][1,2n]

做法

考虑建图,即每个点向编号比它大且差的绝对值为 11 的所有点连边,这时原题变成了最小路径覆盖。DAG 最小路径覆盖一般要转化为二分图最大匹配
但本题是 10610^6 显然直接匈牙利需要大约 31.7131.71 年(不考虑闰年),所以我们要考虑优化。
由于二分图是无向图,所以连边的方式可以改为每个 ii 向所有 aj=ai+1a_j=a_i+1jj 连边,二分图是不变的。
然后发现此时按 aia_i 从小往大匹配一定是不劣的。于是这题就变成从小往大枚举 aia_i 并尽可能匹配 ai+1a_i+1 然后就做到线性(或者 1log1\log,视实现而定)了。

评论

0 条评论,欢迎与作者交流。

正在加载评论...