Examples

2023-6-3 #57 想要把猜测去证实 却无法启齿

——海格P《陌生人》

上一篇博客堆的东西有点多,最近复习学考没啥时间写,就开篇新的!

379 EGOI2021 D2T4 Double Move

套路题。

将宣布看成连边,连通块不是树和基环树肯定不优。令 f(G) 为图 G 合法定向方案数,根据 Angle Beats 2.0 的结论可知方案数是 2cti,其中 c 是基环树数量,ti 是每一棵树的大小。

答案为 i2nif(Gi),从后往前 dp,状压当前图的状态即可,状态数是 ip(i)(ni+1)p 为分拆数),n=35 时为 403779

380 CF1740I Arranging Crystal Balls

感觉不难?被 3500 震慑了😣。

差分一下,我们需保证 a1=0,且差分数组 b 全为 0

b 可以 +k 形成的环考虑,只要固定某条边的取值,这个环的方案就已经确定,容易计算每种方案对应代价。

容易列出一个 O(nm2) 的 dp,从前往后考虑每个环,记录 a1 的取值。

精细分析一下,令 d=gcd(n,m),则我们有 d 个长为 nd 的环,注意到前面的代价可以刻画成 O(nd) 段等差数列,于是使用单调队列优化 dp 即可做到 O(dndm)=O(nm)

381 CF1740H MEX Tree Manipulation

为啥我感觉这题发过啊。

382 P9394 白鹭兰

点开洛谷月赛 => 看 C => 猜了个结论 => 结论对了 => 写不出来(其实我还不确定我的做法对不对,毕竟纯口胡!)。

手玩树的情况可知答案是选择一条链,链上每个点上面挂的子树大小和最大值。

k=1 时是经典的双极定向问题,之前的博客也提到过。

双极定向存在当且仅当图的圆方树是一条链,这与我们前面的猜测吻合,于是我们可以猜测答案是圆方树上选择一条链,链上每个点双的点挂着的点双大小和最大值。

这个可以通过换根 dp 求得。

考虑构造,我们从前往后依次考虑每个点双,做两极固定的双极定向,然后将所有点双的答案序列拼接,然后让答案序列每个点带上其挂着的所有点双。

问题来到了如何做两极 s,t 固定的双极定向,做法是:找一个过 s,t 的环(可以找一条路径,删掉后再找一条),以 s 为根建 dfs 树,要求这个环是树上带根的一个连通块,以这个环作为初始态做一遍开耳分解,然后依次给开耳分解的耳定向。

复杂度 O(n),代码难度极大。

upd:std 是上面链接中 CUREK 的大众做法,代码难度较低。

383 loj#6439. Popcount Xor

直觉的想法是从高到低考虑每一位,计算 [T,T+2b) 的答案,于是我们要计算的无非是 i=0b((bi)mod2)(t+i)tT 的二进制位数),即 ib(t+i)

朴素数位 dp 可以做到 O(logn),但我们有更优秀的做法。

枚举每一位 k 考虑其是否贡献,我们可以通过处理转化为求进位 is[(tmod2k)+(imod2k)2k],即求多少 imod2k>C

注意到 s2k 时答案为偶数,于是可以忽略 i 的取模。

s 最低一位 1l,那么 l 以下的位一定没有用,我们将 s,C 共同删去这些位。此时若 Cs,答案一定为偶数(最后一位选择不影响)。

于是只需求 Cs 子集中大小排名,这只与 C 此时最低位有关。

枚举 k 复杂度仍为 O(nlogn),但上述两条限制对应合法 k 为一段区间,因此容易做到 O(n)

384 CF1817E Half-sum

感觉没那么难。

a 排序后,选择的一定是一个后缀,且分配的 2 的幂次根据贪心决定,于是很容易模拟高精度做到 O(n2) 的复杂度。

假设选择的是 [1,k][k+1,n],我们考察 k 变成 k+1 的影响,推一下可得 (akak+1)2k+(ak+2ak+1)2(nk1)

由于 a 是有序的,前者一定非正,后者一定非负。假设答案在数组的前一半靠前 C=logV 的位置,根据 2 的幂次性质可知答案不会在第一个 ai<ai+1C 步以上,故我们只需检查 O(C) 个位置,复杂度 O(nlogn)

posted @   xiaoziyao  阅读(228)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示