【题解】Solution Set - NOIP2024集训Day12 树上启发式合并

【题解】Solution Set - NOIP2024集训Day12 树上启发式合并

https://www.becoder.com.cn/contest/5472


「CF600E」Lomsat gelral

直接 dsu on tree。记录每一个颜色的出现次数。


「IOI2011」Race

之前是用点分治做的。

考虑 dsu on tree。每个子树内维护到根节点的距离为 x 的最短条数(就是最小深度。

然后加入轻儿子的时候更新当前答案就行了。


因为我们优先计算轻儿子的答案,所以在清空当前子树的影响的时候,可以直接全部清除。


「CF375D」Tree and Queries

比较暴力的两只 log 的 dsu on tree 做法,是再用一个线段树维护每个 cnt 有多少个。

线段树合并的做法,就是再用一个线段树维护 cnt,这样就做到了单 log


现在再来仔细想一想单 log 的 dsu on tree 的做法。

考虑到每次 cnt 最多只会 ±1,我们就可以 O(1) 维护大于等于 k 的个数有多少个。


「CF715C」Digit Tree

一眼推式子题。(下面的运算都在模 m 的意义下进行。

i=1lenwi×10i0(modm)

还是 不太好做。😅


考虑维护每个点到根节点组成的所构成的数字 fi,根节点到每个点组成的所构成的数字 gi

(根节点的 dep0

lca(u,v)=dAns(u,v)=(fufd)×10depd×10depvdepd+(gvgd×10depvdepd)

对于加入的点作为开头,查询点作为结尾(加入左边,查询右边。

fu=(gvgd×10depvdepd)×102depddepv+fdfu=gd×10depdgv×102depddepv+fd

对于加入的点作为结尾,查询点作为开头(加入左边,查询右边。

gv×10depv=(fufd)×102depd+gd×10depdgv×10depv=(gd×10depd)(fufd)×102depd


其实感觉一般的 dsu on tree。

难点就在于选好在 ds(一般是桶)里面维护什么,以及查询什么。并且能够满足全局的性质(不能因为根节点的改变而改变的量,比如到当前子树的根的距离)

跟当前子树的根有关的变量都放在查询那边。


「UOJ284」快乐游戏鸡

先把 st 这条链拿出来,求出 w 的最大值 mx

显然每次回到原点之后是一个很类似的过程,我们往下的策略相当于是 bfs。每一层的答案就是 w 的最大值。

所以我们要维护的是每一个深度最大的 w,每一层的贡献就是 max(mxwi1,0)

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