ABC298Ex

水紫。

多次询问 L,R,求出 i=1nmin(d(i,L),d(i,R))

不失一般性的令 delLdelR

分几部分考虑。

  • LR 的子树中。

预处理 fi 代表 i 的子树中的点到 i 的距离和,si 代表 i 的子树大小。

转移方程:fi=jsonifj+sjsi=1+jsonisj

该部分的答案为 fL+fR

  • 不在 LRlca 的子树中。

klca(L,R)

该部分的路径一定是形如 ikL/R。后半部分取决于 d(k,L)d(k,R) 谁更小,令 m=min(d(k,L),d(k,R))

前半部分是简单的换根 dp,令 gi 代表不在 i 的子树中的点到 i 的距离和。

转移方程:gi=gfa+(nsfa)+ffa(fp+sp)+sfasp=gfa+ffa+nfp2×sp

该部分答案为 gk+(nsk)×m

  • LR 路径上的点的子树中。

这些点一定会先移动到路径上的某个点,然后移动到 L/R,设移动到 R 的判断距离阈值为 B,利用倍增求出 R 的树上 B 级祖先 x,则对原树上 LkR 分成 LyxR 两部分考虑,其中 yx 在链上的下一个点。

注意到 y 仍然可能位于 kR 这条链上,这也说明 Ly 并不是一条深度递减的链,因此将 Ly 拆成 Lkyk 两条链,这样我们只需要对三条直上直下的链处理即可。

注意到这部分已经将第一部分的约束规约,因此可以直接做该部分的约束

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