油尽灯枯之赛

又是美好的爆零日。

我想打球了。

离比赛越近,考得就越烂吗。


老规矩,在前面先写点闲话。

看了 yspm 的博客“像是人类智慧的结晶”之后,我从 imzzy 身旁走过时,总想仔细端详一下。

因为他真的很像析出的晶体:或许是小小的一颗,但是很纯。

以及他浑然天成、与生俱来的,似笑非笑的表情,令人回味无穷。

怪不得 c9 会做那张 cqbzwfls 的合照。我理解他了。


T1:给仙人掌的边随机定向,问每个点期望能到达多少点。

感觉是圆方树上恶心换根 dp,写不来。


T2:有向图,进行 q 次操作:将若干互不相同的边的边权 +1,然后问某个点最短路。

有点降智。一开始以为初始边权全 1,然后发现并不是。

就考虑用势能,将很多边权设为 0 。然后最短路就不会超过 nq

考虑 dijkstra 但是用桶排,且在 q 张图上同时进行。时空复杂度 O(nq)

为啥它会快。我以为是整体 dp 的效果,省去了扫描桶的过程。可能也是吧,但这很蠢……

由于空间会爆,我考虑把 q10 个操作压一组作询问。每组都要重新求一遍最短路!

没错。也就是说,我一直在维护最短路,然后过一段时间我要重新求一次最短路?

image

完整说一遍:对单次修改,最短路不超过 O(n),用桶排可做到 O(n+m) 维护最短路。然后将新的最短距离作为势能即可。

复杂度 O(q(n+m)) 其实还蛮无趣的。


T3:求 minj=1n1ω(xjxj+1) 其中 ω(n)=jncj,需满足 xj[lj,rj] 。保证 rj<2k 。数据范围 n,k50

花了我上午 1h 左右 + 整个下午。气死我了 💢

我以为是 2k/2 之类的。但 crashed 说:“有没有可能是次数较高的 P 算法?”

我想,祂其实已经会了。只不过出于知识封锁的习惯,没有说出来。😢

回到题目上。每个数只需选若干 highbit 使得其满足值域范围,剩下的 bit 总应该和上一个数保持一致。这些 bit 是固定的 bit 的延伸,因此贡献实际出现在固定的 bit 之间。

更具体地,若 x,y 有贡献,则 x,y 之间的固定 bit 没有 x,y 多。不难发现这是笛卡尔树。

Comment. 之前需要 O(2k) 是因为我们在沿着序列方向建笛卡尔树。有时我们要摒弃这种线性的想法。

换成区间 dp,只需记 fl,i,r,j 为,左端点 l 选择的数字是 i 而右端点 r 选择数字 j 时,区间内固定 bit 没有 ij 多,最小代价。显然每个位置上的可能数字只有 O(k) 个,即与 rjljlcp 嘛。

枚举 (l,r) 内固定 bit 最多的位置和它选的数字,复杂度 O(n6)

状态太多,优化之。以 hl 指代固定 bit 的数量。若 hr>hlhr 中较高的 bit 无意义:既不产生贡献,也不带来约束。因此状态中只用记录 h 较小的那个数。这样至少能 O(n5)

更进一步:转移时只用到 fl,k,hk+fk,r,hk,跟 hl 也没关系。因此先枚举 l,r 后,直接枚举 k,hk 得到结果 g,再枚举 hl 可以直接从 g 更新。

复杂度 O(n4) 。由于极其麻烦,我们只能期待 Rainybunny 给出代码实现了。

posted @   OneInDark  阅读(411)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示