回滚莫队如何做到在询问区间中删除一些散点

image

这题要变成板子了有感觉吗

C. Cut Tree

给一棵有正数点权的树,每次询问给定 \(l,r,f\),问只加入标号在 \([l,r]\setminus\{f\}\) 中的边时,点权和最大的连通块的点权和。

先把根号 log 卡常的全杀了 /fn

不难发现直接回滚莫队拼 P5311 就解决了,但是这个做法

image

实际上有不依赖树上连通块性质的做法,也就是说所有回滚莫队题都可以这样询问。。。

每次询问是临时删点的形式,而对莫队的操作序列线段树分治肯定要带 log,那就只有操作分块了,

考虑在回滚莫队里强行做一个操作分块:

在正常的回滚莫队中,对于左端点在同一块中的若干询问,暴力做掉左右端点同块的询问后,需要扫描右端点并对每个询问加入左边的贡献,

而我们暴力做掉左右端点同块的询问后,把剩下的询问分成大小为 \(B\) 的块,

对每个块,标记块内的询问删掉的所有边,然后扫描右端点,扫描过程中忽略标记的边,并对每个询问加入左边的贡献、标记的边中没被删掉的边的贡献即可,

这样每个询问分块可以在 \(O((n+B^2)\alpha(n))\) 的复杂度内解决,共有 \(m/B\) 个询问分块,于是总复杂度 \(O((nm/B+mB)\alpha(n))\),

取 \(B=\sqrt n\),总复杂度 \(O(m\sqrt n\alpha(n))\)。

image

posted @ 2026-09-13 17:51  Sk_sync_closer  阅读(25)  评论(2)    收藏  举报