AGC009

A

从后往前加。

B

刚开始没看懂题意 WA 了两发 /qd

dp 的时候把子树按照深度从小到大安排即可。

C (Easy 2/1)

简单 dp 题。

f0/1,i,j 表示在前 i 个数里面选,第 i 个数在 A/B 集合内,另一个集合中最后选的数是第 j 个的方案数。

使用前缀和优化或线段树优化可以做到 O(n)O(nlogn) 的时间复杂度。

D (Medium 4/0)

我想到的唯一一个东西就是这个东西类似于点分治的过程,但是没什么用。

首先不难发现答案是 logn 级别的。对于每个点,记录一下它被加进来的时间 t,那么对于一种方案,它合法当且仅当对于 u,v 使得 tu=tv=xuv 的路径上都存在一个点 w,使得 tw>x

所以我们考虑从叶子往根贪心选取。我们称一个节点被满足当且仅当其在目前的 dfs 过程中已经确定了一个祖先节点,它的 t 值大于这个节点。每次 dfs 一个点的时候,我们需要记录未被满足的点的时间集合,记为 s。确定 ut 值的时候,我们需要考虑两种限制:

  • tu 不能在 sv 中出现,否则 sv 对应点到 u 的路径不满足了。
  • 如果对于 v1v2,有 ksv1sv2,那么 tu>k,否则对应两点的路径不满足了。

把限制理清楚之后就可以直接贪心了。时间复杂度 O(n)

E (Easy 3/0)

简单的 E 题。

考虑用类似 Kruskal 重构树的方法把操作树建出来,那么深度为 i 的数 x 对答案的贡献就是 x×ki。设 ci,0/1 表示深度为 i0/1 的个数。

发现 c 不同,最后的答案不一定不同,原因是 ci,0/1k 导致的,例如把 k0 放在哪一层答案都一样。如果存在这种情况,可以看作是 0/1 的个数减少了 k1

fd,t 表示操作树深度为 d,钦定 ci,0/1<k 的不同数个数,1 的个数为 t 时的方案数。有了这个钦定的条件,操作树除了深度最大的非叶节点有 k 个叶子节点儿子外,其余的所有非叶节点都仅有 1 个非叶节点儿子,所以 0 的个数也是固定的,方案数可以通过简单 dp 得出,最终的答案就是

i(k1)<nj(k1)<mfn+m1k1ij,ni(k1)

时间复杂度 O((n+m)2)

posted @   Scintilla06  阅读(36)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示