2023-6-3 #57 想要把猜测去证实 却无法启齿
——海格P《陌生人》
上一篇博客堆的东西有点多,最近复习学考没啥时间写,就开篇新的!
379 EGOI2021 D2T4 Double Move
套路题。
将宣布看成连边,连通块不是树和基环树肯定不优。令 为图 合法定向方案数,根据 Angle Beats 2.0 的结论可知方案数是 ,其中 是基环树数量, 是每一棵树的大小。
答案为 ,从后往前 dp,状压当前图的状态即可,状态数是 ( 为分拆数), 时为 。
380 CF1740I Arranging Crystal Balls
感觉不难?被 3500 震慑了😣。
差分一下,我们需保证 ,且差分数组 全为 。
可以 形成的环考虑,只要固定某条边的取值,这个环的方案就已经确定,容易计算每种方案对应代价。
容易列出一个 的 dp,从前往后考虑每个环,记录 的取值。
精细分析一下,令 ,则我们有 个长为 的环,注意到前面的代价可以刻画成 段等差数列,于是使用单调队列优化 dp 即可做到 。
381 CF1740H MEX Tree Manipulation
为啥我感觉这题发过啊。
382 P9394 白鹭兰
点开洛谷月赛 => 看 C => 猜了个结论 => 结论对了 => 写不出来(其实我还不确定我的做法对不对,毕竟纯口胡!)。
手玩树的情况可知答案是选择一条链,链上每个点上面挂的子树大小和最大值。
时是经典的双极定向问题,之前的博客也提到过。
双极定向存在当且仅当图的圆方树是一条链,这与我们前面的猜测吻合,于是我们可以猜测答案是圆方树上选择一条链,链上每个点双的点挂着的点双大小和最大值。
这个可以通过换根 dp 求得。
考虑构造,我们从前往后依次考虑每个点双,做两极固定的双极定向,然后将所有点双的答案序列拼接,然后让答案序列每个点带上其挂着的所有点双。
问题来到了如何做两极 固定的双极定向,做法是:找一个过 的环(可以找一条路径,删掉后再找一条),以 为根建 dfs 树,要求这个环是树上带根的一个连通块,以这个环作为初始态做一遍开耳分解,然后依次给开耳分解的耳定向。
复杂度 ,代码难度极大。
upd:std 是上面链接中 CUREK 的大众做法,代码难度较低。
383 loj#6439. Popcount Xor
直觉的想法是从高到低考虑每一位,计算 的答案,于是我们要计算的无非是 ( 为 的二进制位数),即 。
朴素数位 dp 可以做到 ,但我们有更优秀的做法。
枚举每一位 考虑其是否贡献,我们可以通过处理转化为求进位 ,即求多少 。
注意到 时答案为偶数,于是可以忽略 的取模。
令 最低一位 是 ,那么 以下的位一定没有用,我们将 共同删去这些位。此时若 ,答案一定为偶数(最后一位选择不影响)。
于是只需求 在 子集中大小排名,这只与 此时最低位有关。
枚举 复杂度仍为 ,但上述两条限制对应合法 为一段区间,因此容易做到 。
384 CF1817E Half-sum
感觉没那么难。
将 排序后,选择的一定是一个后缀,且分配的 的幂次根据贪心决定,于是很容易模拟高精度做到 的复杂度。
假设选择的是 ,我们考察 变成 的影响,推一下可得 。
由于 是有序的,前者一定非正,后者一定非负。假设答案在数组的前一半靠前 的位置,根据 的幂次性质可知答案不会在第一个 后 步以上,故我们只需检查 个位置,复杂度 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端