首页 > 其他分享 >树链剖分

树链剖分

时间:2023-03-24 11:36:13浏览次数:27  
标签:结点 剖分 dep 线段 查询 区间 维护 树链

P2590 「ZJOI2008」树的统计

重剖后线段树单点修改,区间查询总和或最大值。

P3178 「HAOI2015」树上操作

子树内 DFS 序显然连续。重剖后线段树单点修改,区间查询总和。

因为只查询从根结点开始的链,所以可以不使用树剖。

单点修改相当于修改子树内所有结点答案。

以结点 \(x\) 为根的子树增加 \(a\),对于子树内的某个结点 \(y\),其答案增加了 \((dep_y-dep_x+1)\times a\)。

\((1-dep_x)\times a\) 这一项是共有的,直接子树修改;\(dep_y\times a\) 这一项我们只需要记录 \(a\) 的和,查询时乘上 \(dep_y\) 即可,同样是子树修改。

P2486 「SDOI2011」染色

重剖,线段树上维护区间颜色段数量和两端颜色,区间合并时如果左区间右端点和右区间左端点颜色相同则颜色段数量减一。链与链之间同样如此。

P3976 「TJOI2015」旅游

因为必须先买入再卖出,所以不能只维护最值,必须直接维护求的这个东西。

因为顺序是先从某个点上去到 LCA 再下去到另一个点,所以区间从前往后和从后往前这两种都得维护。合并的时候分三种情况讨论:买卖只在左区间、买卖只在右区间、买卖跨越左右两区间。

显然整个区间增加并不会影响差价,所以可以直接线段树。

P5838 「USACO19DEC」Milk Visits G

重剖,查询序列中某个区间是否存在某个数。

对于每种数开一个 vector 存储其出现的位置,查询时二分即可。

GSS7 - Can you answer these queries VII

重剖后线段树维护最大子段和。

维护区间最大子段和和最大前缀/后缀和,合并时分类讨论。

P1505 「国家集训队」旅游

额外维护一个相反数标记即可。码量较大。

P3313 「SDOI2014」旅行

重剖,查询序列中某个区间内某种教的信息。

前面那题的加强版,对于每种教将 vector 换成一棵动态开点线段树即可。

标签:结点,剖分,dep,线段,查询,区间,维护,树链
From: https://www.cnblogs.com/landsol/p/17250918.html

相关文章

  • 树链剖分学习笔记(1)
    两大DFS树链剖分是一个比较简单易懂的算法,其两个基础操作为两次dfs,第一次dfs求出每个节点的父节点(\(f_{i}\)),深度(\(dep_{i}\)),子树大小(\(size_{i}\)),重儿子(\(son_{i}\))。其......
  • 重链剖分学习笔记+做题记录
    一、理论知识首先放一张图(明显是OI-Wiki的):\(u\)的子节点\(p_1,p_2,\dots,p_k\)中子树最大的节点叫做重儿子,如有多个,任取其一,记作\(son_u\)。\(u\)除掉\(so......
  • 树链剖分 学习笔记
    apple365:这个东西没有不可替代的作用重链剖分按照重儿子和轻儿子划分。第一遍dfs求出siz[],fa[],dep[],son[]。第二遍打dfn。每次走重儿子会走出一条重链。之后......
  • 【洛谷】P5904 [POI2014]HOT-Hotels(长链剖分)
    原题链接题意给出一棵有\(n\)个点的树,求有多少组点\((i,j,k)\)满足\(i,j,k\)两两之间的距离都相等。\((i,j,k)\)与\((i,k,j)\)算作同一组。\(1\len\le10^5\)......
  • 【CF1009F Dominant Indices】(长链剖分)
    原题链接题意给定一棵以\(1\)为根,\(n\)个节点的树。设\(d(u,x)\)为\(u\)子树中到\(u\)距离为\(x\)的节点数。对于每个点,求一个最小的\(k\),使得\(d(u,k)\)......
  • 长链剖分优化
    概述长链剖分通过对DP状态的复用,有效地降低某些状态具备显著继承性的treedp(多为与当前子树深度有关的dp状态)的转移复杂度。也可以说这是把本质不同的dp状态......
  • 树链剖分
    介绍解决树上问题的时候,对于路径问题我们会想到树分治、启发式合并。对于子树问题我们会想到在dfs序上转化为序列问题方便维护。那么对于路径问题,能不能也转化为序列问......
  • 学习笔记:重链剖分
    重链剖分前置芝士:线段树,dfs序,LCA概念一个非叶子节点,他的儿子中子树大小最大的就是重儿子,否则就是轻儿子对于一条边,如果连接的子节点是重儿子,那么这条边就是重边,否则......
  • 树链剖分模板(为什么我的这么长???)
    #include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>#definelidid<<1#defineridid<<1|1usingnamespacestd;l......
  • 树链剖分
    终于学到了树剖!!!前置知识:LCA,树形DP,DFS,邻接表,线段树。 树链剖分线段树的特点:区间修改,区间查询,线性;树上差分特点:单点修改,树形区间查询;现在,如果我们想进行树形区间修改......