重剖

  • P12693 BZOJ3589 动态树(求并集转化为区间覆盖问题)

  • P3703 [SDOI2017] 树点涂色(分讨维护树上颜色段)

对于操作 2,显然因为每次都是染全新的颜色,而且只在 \(x\) 到根节点上,所以这个操作直接按照树上差分的逻辑,答案即为 \(dis_x+dis_y-dis_{lca}+1\)\(dis\) 当然需要线段树维护,\(+1\) 是为了加回来 \(lca\) 重复减去的贡献)

对于操作 3,因为子节点到根的路径都经过 \(x\),所以直接对 \(x\) 子树的 \(dis\) 值取 \(\max\) 即可。

难点在于操作 \(1\)。首先需要明确以下的操作都是在子树内(因为我们只关心单点和子树的答案)。我们考虑维护一个同色集合 s 以及一个异色集合 s1。在修改时,因为是把重链上的点改为一个新颜色,所以对于重链一侧的轻链上的同色点贡献加一,然后删除这个轻链;对于重链上的异色点是同理的,贡献变为 \(-1\)

然后考虑重链上的同色点,这只可能在重儿子处出现(因为它还没有被更新),它改完之后就和链顶异色了,所以贡献加一,还得加进异色集合中。因为轻链上的异色点还是异色,所以没有贡献。

最后,对于上一条链,本来它们是异色的,现在全染成新颜色了,所以贡献是 \(1\)

  • P5838 [USACO19DEC] Milk Visits G(离线思想)

按照询问的品种排序,将询问离线,每次将路径上该品种的点设为 \(1\),然后查询路径和即可。

  • AT_kupc2021_e PERMST(图论建模+数据结构优化)

题解

posted @ 2026-08-14 21:38  _KidA  阅读(5)  评论(0)    收藏  举报