是把一棵分割成若干条,以进行树上操作的一种方法。有很多种类,本文主要介绍最常用的重。 重 一、定义 一个节点的子节点中子树大小最大的为重子节点,其余节点为轻子节点。特别地,若有多个子节点的子树大小相等,则在其中任选一个作为重子节点,其余为轻子节点。 一个节点到其重子节 ...
转载 2021-08-07 18:07:00
129阅读
2评论
看起来是个很高级的算法,但实际上很简单。在介...
转载 2017-10-08 17:28:00
179阅读
2评论
总结: 实质就是将树上的普通节点变成区间的故事,然后用线段来求解。 1、 其实就是把边哈希到线段树上的数
转载 2018-01-08 18:26:00
96阅读
就是对一棵分成几条,把树形变为线性,减少处理难度需要处理的问题:将
转载 2022-07-05 10:32:19
83阅读
关于实质上是通过轻重的划分,将剖成一条条重,首尾相连存进数据结构(线段、树状数组、splay之类的),支持路径查询,修改等如何实现?定义以下几种东西重儿子 子树大小最大的儿子轻儿子 除重儿子其他的都是轻儿子重边 每个点连向它的重儿子的边轻边 连向轻儿子的边重 重边组成的这里总共有5条重,1-2-4-8、5、9、3-6-10、7我们按照优先重的DFS序重新标号,用DFN[]数
原创 2016-05-20 19:16:52
58阅读
一些定义 重儿子: 结点所有儿子里子树规模最大的结点,即$sz[ x ]$ 最大。 我第一次接触这个概念居然不是在这,而是在这。 P5666 CSP-S2019 的重心 有时间再写题解吧,这是一个不错的思维题。 重: 从重儿子一直延伸到叶子结点的路径。 : 任意两点间的距离 ( 不严谨的说。 ...
转载 2021-08-12 16:40:00
243阅读
2评论
意义: 就是对一棵分成几条,把树形变为线性,减少处理难度 概念 题目大意: 给定一棵有根,给定每个点初值。 需要处理的问题: 分析: +线段 部分: 需要数组: 1.dfs1: 目标: ①找到fa,重儿子(son) ②处理节点深度,子树大小(size)(dep[root
转载 2018-05-13 12:00:00
301阅读
2评论
嗟乎!之难者线段也,非也。 (文末有*****) 顾名思义,是树上的路径。,就是将一棵分成若干,再用数据结构(如线段)去维护每一条,明显复杂度 O(log n) 。 ,又名“重”,那什么是重呢? 我们将中的边分为轻边和重边,定义Size(x) 为以 x ...
转载 2021-07-27 20:01:00
111阅读
2评论
详解(洛谷模板 P3384) 洛谷·[模板] 写在前面 首先,在学分之前最好先把 LCA、树形DP、DFS序 这三个知识点学了emm还有必备的 链式前向星、线段 也要先学了。 如果这三个知识点没掌握好的话,难以理解也是当然的。 就是对一棵分成几条
转载 2019-11-18 23:32:00
71阅读
2评论
本博客的主要思路来源:详解(洛谷模板 P3384)、OI Wiki 作用 简单点说,就是将一棵分成几条,然后给它标号标成线性,然后处理区间问题: 将的$x$点到$y$点最短路径上所有结点的值都加d 询问的$x$点到$y$点的路径和 将以$x$为根的子树内所有值加$d ...
转载 2021-10-23 21:36:00
123阅读
2评论
不是教程,是一些写码时候发现的问题 具体教程可以参考博文https://www.cnblogs.com/chinhhh/p/7965433.html 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; ...
转载 2021-08-12 21:39:00
74阅读
2评论
定义: ,又称“重”。我们将中的边分为轻边和重边。定义Size(x) 为以 x 为根的子树的节点个数,令 x 的儿子中 y 的Size()最大,那么,我们称边(x,y)为重边,y为x的重儿子。而由重边构成的即为重。 性质: 从根到某一点的路径上,轻边不超过O(logN) ...
转载 2021-08-17 21:53:00
122阅读
2评论
推荐一篇博客 我的模板(洛谷p3384) #include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cctype>#include<cmath>#include<cst
转载 2018-02-21 20:42:00
87阅读
2评论
入门博客推荐 分说白了就是把一棵拆成若干个不相交的,然后用一些数据结构去维护这些。 因为通常的数据结构处理区间信息很容易,但处理树上的信息就显得捉襟见肘了。于是我们想到把拍成一个区间用线段去维护信息。(和的dfs序是类似的原理)。 的几个常见应用: ①查询/修改的子树的值
转载 2019-08-10 19:14:00
87阅读
2评论
前言 qwq 加,和,子树加,子树和 题目 【模板】轻重/ 描述 如题,已知一棵包含 NN 个结点的(连通且无环),每个节点上包含一个数值,需要支持以下操作: 1 x y z , 表示将从 \(x\) 到 \(y\) 结点最短路径上所有节点的值都加上 \(z\) 。 2 x y ...
转载 2021-09-14 09:23:00
62阅读
参考博客:详解 #的引入 ##先回顾两个问题: 1、将从x到y结点最短路径上所有节点的值都加上z 我们很容易想到,树上差可以以 O(n+m) 的优秀复杂度解决这个问题 2、求从x到y结点最短路径上所有节点的值之和 lca大水题,我们又很容易地想到,dfs O(n)预处理每个节点 ...
转载 2021-07-20 15:21:00
227阅读
2评论
要求 已知一棵包含 NN 个结点的(连通且无环),每个节点上包含一个数值,需要支持以下操作: 1 x y z,表示将从x到y结点最短路径上所有节点的值都加上z。 2 x y,表示求从x到 y 结点最短路径上所有节点的值之和。 3 x z,表示将以x为根节点的子树内所有节点值都加上z。 ...
转载 2021-10-08 09:30:00
112阅读
2评论
“在一棵树上进行路径的修改、求极值、求和”乍一看只要线段就能轻松解决,实际上,仅凭线段是不能搞定它的。我们需要用到一种貌似高级的复杂算法——是将一棵按照特殊的dfs序划分成,从而使树上任意一条最多被划分为log(n)段,同时保持的dfs序对子树操作的便利。 什么是 ,它可以对一棵进行轻重后用数据结构来维护每条重。 比如下面这个问题:假...
原创 2023-02-03 09:53:01
71阅读
最近几次比赛都打得很惨,都怪我图论学得不好,这几天痛定思痛,好好学了线段,现在写一篇博客记录一下。 最基础的维护区间加与区间查询的线段之前已经学过了,来个提高题吧。 P3373 【模板】线段 2 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 x 将某区 ...
转载 2021-10-07 17:04:00
140阅读
2评论
前置芝士:低复杂度的区间操作算法(线段等)+dfs+LCA 例题引入:模板 题目要求我们对树上的路径和子树进行修改与查询 暴力: 任何算法的优化都是源于暴力, 对于路径的修改,我们可以直接采用LCA求出A和B的公共祖先C,对于(A,C)和(B,C)两条路径进行加和 对于子树的修改,我们可以 ...
转载 2021-07-26 12:39:00
151阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5