zoukankan      html  css  js  c++  java
  • 树链剖分

    树链剖分

    众所周知,树链剖分就是一种无缘无故让你的代码长度增加1k的数据结构

    一个模板问题

    给你一颗树,要求进行以下操作

    1.修改一条路径上的所有点权值

    2.查询一条路径上的所有点权和(也可以是最大值最小值)

    3.修改一颗子树上的所有权值

    4.查询一颗子树内的所有点权和(也可以是最大值最小值)

    5.换根(一部分题目当中会涉及到)

    树链剖分

    顾名思义,树链剖分的核心就是将树划分成很多条不重叠但能包括所有点的链

    为了方便后面的划分,定义以下几个概念

    1.重儿子:一个点的儿子中子树大小最大的儿子

    2.轻儿子:除了重儿子的所有儿子节点

    3.重链:重儿子连成的链(事实上整棵树就是一大堆重链放在一起)

    我们划分的过程实际上就是一个找重链的过程

    我们先从根开始,找到一条重链,然后从根的轻儿子开始,继续找重链,这样以此类推我们就将树划分完成了,在找重链的过程中,我们每到一个点,就给它一个dfn序,这样以来,相当于每一颗子树上的节点的dfn标识都是连续的,每一条重链的dfn标识也是连续的,我们用线段树来维护这些dfn序对应的点权

    对于操作:

    在路径上的操作就将路径拆分成多条重链,这样一来我们发现几个操作实际上都是针对一堆dfn标识连续的节点,然后就可以用线段树来维护了

  • 相关阅读:
    解决:微信小程序富文本识别不了空白p标签的方法
    微信小程序
    fastadmin
    微信小程序
    fastadmin使用笔记
    fastadmin使用笔记
    您有新的订单,请注意查收 提示音
    js获取视频第一帧生成图片
    解决JQ WeUI 的 Picker无法动态传值的问题
    微擎 人人商城小程序获取不到用户信息
  • 原文地址:https://www.cnblogs.com/BZDYL/p/14366719.html
Copyright © 2011-2022 走看看