【口胡】CSP-S2019
[CSP-S2019] 树上的数
这显然是一个树上贪心的问题。
[CSP-S2019] 划分
借助干草堆的思路:所叠层数最高时,其底层最窄。
不难写出状态转移方程:
f x = f y + 1 ( s u m x − s u m y > = g y ) f_x=f_y+1(sum_x-sum_y>=g_y) fx=fy+1(sumx−sumy>=gy)
我们要求出满足条件且 f y f_y fy最大时, y y y的最大值,然后令 g x = s u m x − s u m y g_x=sum_x-sum_y gx=sumx−sumy
注意到 f y f_y fy递增,所以我们只需要找到满足条件的 y y y的最大值就行了。
可以用单调队列优化,维护一个 s u m y + g y sum_y+g_y sumy+gy单调递增的序列即可。
顺便提一下,如果 s u m x sum_x sumx没有单调递增的性质,可以用二分查找。
时间复杂度 O ( n ) O(n) O(n)。
本题的状态转移方程:
f x = f y + ( s u m x − s u m y ) 2 f_x=f_y+(sum_x-sum_y)^2 fx=fy+(sumx−sumy)2
稍微有点不同的地方在于,和上一个状态转移方程相比,转移代价不是常数1。
事实上我们可以知道:应该尽量让当前层的长度最小,同时能获得最小代价。
条件: s u m x − s u m y > = g y sum_x-sum_y>=g_y sumx−sumy>=gy
⇔ s u m x > = s u m y + g y \Leftrightarrow sum_x>=sum_y+g_y ⇔sumx>=sumy+gy
需要维护一个 s u m y + g y sum_y+g_y sumy+gy单调递增的序列。
如果要找的是最远点呢?那新加的点多半是没有用的。我们应该遵循新加的点一定有可能用上这一原则。
[CSP-S2019] Emiya 家今天的饭
要求合法的方案数,等于总方案数-不合法的方案数
设 f x , y f_{x,y} fx,y 表示前 x x x 种烹饪方法,做 y y y 道菜的方案数,总方案数可以 O ( n m ) O(nm) O(nm) 解决。
不合法的方案数=每种食材使用超过 ⌊ k 2 ⌋ \lfloor\frac{k}{2}\rfloor ⌊2k⌋ 的并
注意到每种方案最多只有1种食材超过 ⌊ k 2 ⌋ \lfloor\frac{k}{2}\rfloor ⌊2k⌋
设 g i , j , k , s g_{i,j,k,s} gi,j,k,s 表示前 i i i 个人,做了 j j j 道菜,至少选了 s s s 次 k k k 食材的方案数
时间复杂度 O ( n 3 m ) O(n^3m) O(n3m)。
我们发现枚举统计答案是 O ( n m ) O(nm) O(nm) ,预处理是 O ( n 3 m ) O(n^3m) O(n3m),考虑平衡时间复杂度。
容易发现 j , s j,s j,s 有联系,可以用 2 ∗ k − j 2*k-j 2∗k−j表示超过半数,这样就变成 O ( n 2 m ) O(n^2m) O(n2m) 了。
-j<=2*k-j<=j
0<=2k-j+j<=2j
[CSP-S2019] 树的重心
读题。。。
考虑暴力。枚举边(u,v),分别以u,v为起点向子树寻找重心,每次走向一个重儿子,直到找到重心。
这个算法在子树不平均或链的形态时会退化成O(nm)
考虑树链剖分。
注意到树链剖分都是指向重儿子。
如果这是一个静态问题,那么记录 s o n x son_x sonx, s o n 2 x son2_x son2x, s i z x siz_x sizx, f x , y f_{x,y} fx,y 表示重儿子的 2 y 2^y 2y 路径即可。
由于是动态问题,所以需要 O ( l o g n ) O(logn) O(logn) 维护上述信息。
当 d f s y dfs_y dfsy 时,把 y y y 作为根;当 y y y 回溯时,又把 x x x 作为根,同时更新 f f f 数组。
幸好有维护数据结构的功底,不过还是维护了很久。
注意跳的时候不是判断是否合法,而是其上方子树<= ⌊ s u m 2 ⌋ \lfloor\frac{sum}{2}\rfloor ⌊2sum⌋
而且重构的时候不能中途break,必须更新完。
tips:最开始只对son_x值有改变的进行了重构,实际操作中u,v都必须重构,否则会出错。
还是没有想明白一个细节:为什么u,v都必须重构。。。
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530355.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」