首页 > TAG信息列表 > 重链

Luogu P8479 「GLR-R3」谷雨

自己写的关于这类剖分方法的 \(blog\) 题意简述 称一条链和与其有连边的点 构成的点集 为 “毛毛虫”,链上的点为 “毛点”,某个 “毛点” \(x\) 的脚(与之右边但非链点)的点集为 \(T_x\)。 操作:给出一条 “毛毛虫” 的两端 \(u, v\),将该“毛毛虫”内的点的点权改为 \(k\); 询问:开始有

【考试总结】2022-08-02

西克 找到满足 \(x\) 的祖先 \(z\) 中满足 \(a_z=b_x\) 的中最靠下的一个。那么正向树上倍增可以求出来 \(Qx\) 到 \(\rm LCA(Qx,Qy)\) 的结果。剩下半边可以一个一个重链跳。在每条重链上先找到第一个 \(a_p\) 等于手上颜色的 \(p\)。预处理一个反向的倍增,跳到下一条重链的接口处

动态 dp

没写代码,暂且不知道有多少处笔误,还需要好好理解。。 动态 dp 矩阵乘法大家都会!dp 大家都会!线段树大家都会! 一些线性 dp 可以写成矩阵乘法的形式,这里矩阵乘法可能是 \((+,+)\),也可能是 \((\max,+)\),也可能是 \((\min,+)\) 等等,但是只要有结合律就可以。 在每个点处的转移都写成一

毛毛虫剖分

目录毛毛虫剖分问题描述重标号方法重标号性质例题NOI2021 轻重边 主要参考:https://www.cnblogs.com/A-Quark/p/16435243.html 毛毛虫剖分 问题描述 毛毛虫剖分,一种由轻重链剖分(HLD)推广而成的树上结点重标号方法,支持修改 / 查询一只毛毛虫的信息,并且可以对毛毛虫的身体和足分别修改

树链剖分

引言 树链剖分(简称“树剖”,又称“重链剖分”)是一种将一棵树转化为一段连续的区间的方法。 这种方法可以将一棵树根据子树大小,也就是所谓的“重儿子”和“轻儿子”,来将一棵树划分成若干条”重链“,并可以保证,在任意一条路径上的连续的链都不超过 \(\log_2{n}\) 个。 树剖可以借助一

树链剖分学习笔记

树链剖(pōu)分 定义 树链剖分用于将树分割成若干条链的形式,以维护树上路径的信息。 树链剖分有多种形式,如重链剖分、长链剖分等,通常说的树链剖分指重链剖分。 重链剖分 首先给出一些定义: 重子节点:所有子节点中子树大小最大的子节点 轻子节点:除重子节点的其它子节点 重边:从

轻重链剖分学习笔记

这是第二遍 \(dfs\),定义:\(son[now]\) 为 \(now\) 点的重儿子,\(topf\) 为当前的重链上深度最小的一个点也就是开始的点。我们在遍历整棵树的时候,会选择先去遍历这个点的左儿子然后再去管其他的点。我们在这一遍遍历其实就是在给他们分配线段树上的基本信息以及记录轻重链的基本信

【模拟赛】乌拉~~(重链剖分)

背景 大家好,我是一名勇敢的俄罗斯士兵,我昨天正在打 C o d e F o

LOJ6679 Unknow

这题感觉好难写,作为大颓怪,只想嘴巴,所以就有了这篇嘴巴题解。 我们考虑询问时问的 \(x\in[l_i,r_i]\) 的,也就是一段线段,这启发我们用李超线段树。 然后由于是链上查询,我们又想到了树剖,所以我们有一个很自然的想法是树剖后,李超线段树维护每一条重链的前缀,这一部分是两只 \(\log_2n\)

长链剖分小结

概述: 参考神犇yyb的博客 问题:如何做到\(O(nlogn)-O(1)\)复杂度求解\(k\)次祖先? 常规倍增是\(O(nlogn)-O(logn)\)的,重链剖分是\(O(nlogn)-O(logn)\)的,欧拉序st表能在\(O(nlogn)-O(1)\)复杂度内求两点LCA,但并不能查出k次祖先是谁 长链剖分 方法和树剖十分类似,代码也几乎相同,但我们每

dfs序与树链剖分

dfs序与树链剖分 本文根据以下视频整理 链接 引子 先看一个题: 已知一棵树,每个节点包含一个权值,你需要设法实现以下操作 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有结点的值加上z 操作2: 格式: 2 x y 表示求树从x到y结点最短路径上所有结点的值之和 操作3: 格式:

DDP.动态树分治

"动态 DP"&动态树分治--DDP 题面 每次强制点的权值,求整棵树的最小覆盖子集 概念: 最小覆盖子集:从V中取尽量少的点组成一个集合,使得E中所有边都与取出来的点相连 通俗理解:两座城市相连,其中必须选一个城市,求选出最少的城市数量 \[f[u][0]=\sum f[v][1] \]\[f[u][1]=\sum\min\{f[v][

LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度 LCT + SAM + 线段树

我们有一个经典模型: 两个串的最长公共后缀长度,是后缀树中两点 LCA 的深度.  直接求 LCA 似乎有些困难,不妨这样想 :  设两个串在后缀树中对应的点分别为 $a,b$,将 $a$ 到根的路径涂色,$b$ 向根爬,遇到的第一个涂色点即为 $a$ 与 $b$ 的 LCA.   我们用 $LCT$ 来维护 这颗树,涂色操作直

[NOI2014] 购票

这题怎么大家都做过了/kk 感谢 Fz 的题解! 首先这题有一个 DP 式子, \[f_i = d_i \times p_i + q_i +\min(-d_j\times p_i+f_j) \]明显是斜率优化的形式。 但对于 \(u\) 有贡献的只有离他较近的若干个祖先。 这里就有几个做法; 点分 树剖,u 到某个祖先可以剖为 若干条重链的前缀 + 一

树链剖分学习笔记

引入 序列上的很多问题可以用线段树等数据结构维护,树上的问题则可以转化为序列上的问题,然后用相应的数据结构维护。 树链剖分可以在\(O(logn)\)的复杂度内将树上的一条链转化为\(O(logn)\)个区间。 树链剖分 我们以P3384 【模板】轻重链剖分为例讲解 长什么样子 图中一棵树,每个点

CSP·OI吟

这个 \(LCT\) ,我听得很懵逼 在 \(Splay\) 里面,好像有重链 不用线段树,\(Splay\) 来维护 树的形态有改变,不只是那一条边 所以要把整棵树,重新剖一遍 什么重链~什么轻边~什么重儿子 节点 \(PPT\) 上的操作演示,今天上午的丢人考试,不忍直视。 \(PPT\) 上的一个圈,一圈就是一条边 老天爷你

LOJ3213 「CSP-S 2019」树的重心

题意 给一棵 \(n\) 个点的树,求断掉每条边后两棵树的重心。输出编号和。\(n \leq 3\times 10 ^ 5\)。 题解 solution by hydd 显然任意情况下两个重心一定是相邻的,我们先求出其中较靠下的那个重心,最后 \(check\) 一下其父亲是不是也是重心就可以了。 结论:任意一个树,以任意点为根,重

【毒链剖分】

树链剖分 这是个让初学者望而却步的东西,不管打了多少次,也很难一遍过(我太弱了) 根据这个树锯结构可知,这是个锯树结构。它把一棵树拆分成若干条链,从而利用一些其他的数据结构来维护每一条链 常见的路径剖分的方法是轻重树链剖分(启发式剖分) 那我们先来康康毒链剖分有哪些操作吧! 定义

LOJ#6289. 花朵 树链剖分+分治NTT

本来以为这道题会非常难调,但是没想到调了不到 5 分钟就 A 了.   由于基于多项式的运算都可以方便地进行封装,所以细节就不是很多(或者说几乎没有细节)    题意:给定一棵树,每个点有点权,求对于所有大小为 $m$ 的独立集的点权之积的和.      数据范围:$n,m \leqslant 8 \times 10^4

树链剖分

#树链剖分 1,将树从x到y结点最短路径上所有节点的值都加上z 这也是个模板题了吧 我们很容易想到,树上差分可以以O(n+m)的优秀复杂度解决这个问题 2,求树从x到y结点最短路径上所有节点的值之和 lca大水题,我们又很容易地想到,dfs O(n)预处理每个节点的dis(即到根节点的最短路径长度) dis(

动态DP,ddp

动态DP?动态动态规划? 个人理解:动态DP,就是普通DP加修改操作,然后就变成了个毒瘤题。 直接就着例题写吧。 例题 P4719 【模板】"动态 DP"&动态树分治 求树上最大独立集。要求支持修改点权。n<=1e5. 算法原理 首先不带修的最大独立集是一个NOIP题: \(f[cur][0/1]\) 表示 \(cur\) 选/不选

洛谷网校:树形问题(持续更新)

2020.2.2 树形问题(未完待续) 1.基础知识 1.基本性质 有n 个点,n − 1 条边的连通无向的无环图是无根树 规定无根树某节点为根节点,就变成有根树 树上两点间有且仅有一条路径,该路径的长度称为两点的距离 除根节点外,每个节点有且只有一个父亲 除了叶节点,每个节点有至少一个儿子 2.规定

树链剖分

转载请标明出处,以下部分内容主要转自Ivanovcraft巨佬的博客,加上了一些自己的见解和自己的代码。 对于修改树上的点权值,我们可以想到用树上差分来做。 对于求两点之间路径上的点的权值和,我们可以利用倍增的思想很好的解决这个问题。 可是,当修改与查询结合起来,就不能把这两种方法简

树链割分原理和实现

树链割分即将树分割成为一段一段的线段区间,具体分割的过程就是一个dfs的过程,然后就可以将树结构划分为数组结构,从而实现树上的区间操作,即用线段树或者树状数组处理。 首先就是一些必须知道的概念: 重结点:子树结点数目最多的结点; 轻节点:父亲节点中除了重结点以外的结点; 重边:父亲

树上分治

相关链接: 国家集训队论文2009: 漆子超《分治算法在树的路径问题中的应用》 点分治: 首先选取一个点将无根树转为有根树,再递归处理每一颗以根结点的儿子为根的子树。 [POJ1741]Tree [SPOJ1825]FTOUR2 边分治: 在树中选取一条边,将原树分成两棵不相交的树,递归处理。 [SPOJ2666]QTR