随笔分类 - 树链剖分
摘要:传送门 考虑一个玩家的路径 $(x,y)$ 对路径上的一个节点 $u$ 的贡献 设 $lca=LCA(x,y)$ ,当 $u$ 在链 $x,lca$ 上时,路径会产生 $1$ 的贡献当且仅当 $dep[x]-dep[u]=w[u]$ 其中 $dep[i]$ 表示节点 $i$ 的深度,$w[i]$ 就
阅读全文
摘要:传送门 树剖模板,有换根操作 先打一个树剖模板 然后考虑换根有什么影响 对于两点间的路径上的询问显然没有影响 子树查询和更改有一些影响: 画个图,然后分类讨论一下 如果在原树上新根 $rt$ 不是询问的子树根 $x$ 的后代节点 那么不会有影响 否则,询问的区间就是整颗树减去 $rt$ 在原树上最高
阅读全文
摘要:传送门 树剖+动态开点线段树 对每种宗教开一个线段树,用来维护区间和,区间最大值 普通的线段树空间不够,所以要动态开点 因为宗教会改变,所以要有删除操作和插入操作 比如城市1从信仰a变成信仰b,那就把a的线段树上城市1删掉,在b线段树上插入城市1 询问就只要询问与旅行者同宗教的值就好了 怎么实现也不
阅读全文
摘要:传送门 先考虑在一段序列上进行操作如何维护 线段树 记录每个区间的的颜色段数量 但是区间合并时两边可能颜色相同 所以再记录一下每个区间最左和最右的颜色 合并时如果相邻两边颜色相同,那么颜色段数量就要减一 然后考虑在树上操作 直接上树剖,一样用线段树维护就好了 询问时记录一下当前左右两边最上面的颜色
阅读全文
摘要:传送门 非常显然的一道树剖 用线段树维护区间为1区间为0 因为修改只有在根到节点 甚至不用维护深度 因为一开始节点都为0 甚至不用线段树的 build 操作 比模板还简单... 至于询问修改了多少就只要把修改后的数量减去修改前的数量
阅读全文
摘要:传送门 树链剖分 树链剖分就是把一颗树分成很多条链,然后把链上的数据进行瞎搞操作(本题是用线段树区间修改) 一步一步慢慢讲: 1. 从根节点开始对整颗树进行一次遍历 求出每个节点子树的大小,父节点,深度和重儿子 重儿子指 儿子子树大小最大 的儿子节点 (做这些都是为了后面瞎搞) 2. 再来一次遍历.
阅读全文