CF1708

菜鸡选手只能打 Div.2 维持生活。

这次 10min 过了 AB,实力强劲!

C(二分、贪心)

然而还是卡 C 了。

发现答案下界是 i=1n[aiq]。考虑选哪些满足 ai>qi。发现选的数在所有满足条件的数中是一个后缀,并且如果最后降智为 0 是不优秀的。直接从后往前扫维护最终值并不好做,但是没关系,我们直接二分就好了。

但是上面做法实际上相当蠢。考虑最优的情况最后是 0,那么从 0 开始往前倒推就可以了。虽然有可能出现直接从 x 掉到零下的情况,但是 x 能做 0 肯定是能做的。我在想的时候没有仔细探讨这一点。

感觉有些信息维护不了的时候可以套上一个二分?

D

Wrong Answer on test 7.

先瞪这个题。直觉告诉我们差分数组并不会太大。假设差分数组是 bi。那么有关系式:i=1n1an。发现本质不同的 b 只有 an 个!那么我们开个 map 维护本质不同的元素然后暴力就好了。

令人谔谔的是我的直觉还告诉我若干个 x 答案是 x。然后寄了。

E(dfs 树)

感觉丢 D 看这个 E 可能更好。但是还是做了好久,最近好像接受了一些奇怪的 DP 技巧后魔怔了,不会推充要条件了。

显然 MST 和 dfs 树都是唯一的。考虑什么时候不合法,对于一条非树边 (u,v),搜到 u 的时候如果 v 没被遍历那么就不行,搜到 v 后遍历 u 也不行,那么唯一的情况是 uv 的祖先边。考虑这样做的道理,显然 u 在 MST 上走向 v 的那条边的边权小于 (u,v) 的边权,所以合法当且仅当树上 u,v 为祖先-儿子关系。

怎么做都可以。

F(二项式反演、DP)

再次感到了被 DP 和容斥支配的恐惧。

我开始想定义 fi,j 表示 i 子树在 j 次操作之后只剩下根的方案数。转移即考虑合并两个集合序列。这样可以 O(n3),然后就不知道怎么优化了。

发现可以通过二项式反演放宽一些限制。考虑对于这个塔结构,去除掉 SiSi+1 的条件。那么假设原答案是 Fi,可以相等的条件是 Gi,那么通过钦定相等的位置可以得到 Gi=ji(ij)Fj,反演一下,问题就转化为了求 G

考虑合法的条件:若两个属于 u 不同子树的结点 x,y 都没有被删除,那么 u 也不会被删除,这等价于如果 u 被删除,那么子树只能留一个。这可以考虑定义 gu,i 表示 u 子树在 i 次操作后被删空的方案数。因为一次删完是合法的,所以可以定义 fu,i 表示 u 子树在 i 次操作后还有点的方案数。显然有 gu,i=fu,i1

考虑怎么转移 f,分两种情况:u 和所有结点一起删除,u 在所有结点被删完之前就删完了,换句话说 u 在删除前是/不是一个二度点。对于第一种情况,只需要子树合法即可,那么:

fu,i=vsonuj=0ifv,j

可以做前缀和是因为我们后面容斥掉了。

对于第二种情况,枚举最后剩下的那棵子树和 u 被删除的时间点,有:

fu,i=vsonufv,ip<ixv,xsonuj=0pfx,j

随便前缀和一下就 O(n2) 了。

回顾这个题,首先我们用二项式反演放宽了一个限制 SiSi+1,然后紧扣删除时间点的性质定义了表示时间点 i 被删空代表的状态 gu,i,从而得到了一个封闭转移。总之,容斥放宽限制的方法,切合条件定义状态的原则要时刻牢记。

posted @   yllcm  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示