数据结构·树链剖分+LCT

于是两个一起搞了。。。

怎么说,写的是P党风格的C++,短也不会短到哪里去,跑起来也不快,常数大成狗OTL

BZOJ 1036 树链的经典题吧,点修改+路经询问

【Code】

BZOJ 2243 路径修改+路径询问

【Code】

BZOJ 3083 路径修改+子树询问(根可变),这道题要用树链剖分求DFS序中某一段区间的值(DFS序可查子树,链剖可修改路径,两者相结合就行了)

【Code】

BZOJ 2049 用LCT维护森林形态

【Code】

BZOJ 2631 路径修改+路径询问+形态可变

这道题刚开始自己用数组写,然后Run得好慢好慢。。。然后自己去写了次指针版的LCT,发现跑得更慢,连AC都不行QAQ

实在是太弱了啊QAQ

数组版【Code】指针写残版【Code】

BZOJ 2002 也是单单维护树形态就行了。这题本来还可以写成静态块状链表的,结果LCT跑得竟然更快些。。。

【Code】

时间: 2024-10-04 15:27:12

数据结构·树链剖分+LCT的相关文章

[BZOJ2243]SDOI2011染色|树链剖分|LCT

裸题嘛.. 先考虑一条线段上如何查询颜色段数,只要对每个线段树节点多维护一个左颜色和右颜色,然后合并的时候sum[x]=sum[lc]+sum[rc]-(左儿子的右颜色==右儿子的左颜色)..实在太久没写树剖结果码+调试花了两节多晚自习,,各种傻逼错误,什么反向边忘加,标记忘记下传...还有就是更新答案的时候,关键的一点是要保证当前的两点(也就是a,b)是没有被更新到的,否则很难搞.. 表示LCT要更好写..不过在BZOJ上我的树链剖分6000+MS,LCT要13000+MS.. 树链剖分: #

bzoj 4817: [Sdoi2017]树点涂色【树链剖分+LCT】

非常妙的一道题. 首先对于操作一"把点x到根节点的路径上所有的点染上一种没有用过的新颜色",长得是不是有点像LCT中的access操作?进而发现,如果把同一颜色的点连起来作为LCT中的重边的话,那么询问二就相当于问路径上的虚边有多少. 然后第二.三个操作是可以用树剖在线段树上维护的. 设每个点的权值\( val \)为这个点到根的路径上颜色个数,也就是虚边个数.那么考虑access操作的影响,对于他断开的重边,所在子树加一,对于他连上的重边,所在子树减一.直接在access过程中处理即

数据结构(树链剖分):BZOJ 4034: [HAOI2015]T2

Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a . 操作 3 :询问某个节点 x 到根的路径中所有点的点权和. Input 第一行包含两个整数 N, M .表示点数和操作数. 接下来一行 N 个整数,表示树中节点的初始权值. 接下来 N-1 行每行三个正整数 fr, to , 表示该树中存在一条边 (fr, to) . 再

数据结构(树链剖分):COGS 2109. [NOIP2015] 运输计划

2109. [NOIP2015] 运输计划 ★★★   输入文件:transport.in   输出文件:transport.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 公元 2044 年,人类进入了宇宙纪元. L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家物流公司,该公司有很多个运输计划,每个运输计划形如:有一艘物 流飞船需要从 ui 号星球沿最快的宇航路径飞行到 v

数据结构(树链剖分,堆):HNOI 2016 network

2215. [HNOI2016]网络 ★★★☆   输入文件:network_tenderRun.in   输出文件:network_tenderRun.out   简单对比时间限制:2 s   内存限制:128 MB [题目描述] [输入格式] [输出格式] [样例输入1] 13 23 1 2 1 3 2 4 2 5 3 6 3 7 4 8 4 9 6 10 6 11 7 12 7 13 2 1 0 8 13 3 0 9 12 5 2 9 2 8 2 2 0 10 12 1 2 2 1 3 2

浅析树链剖分Orz

本文思路参考自何开大佬 引子 相信各位大佬一定会线段树这种非常实用的数据结构 那么如果我们要维护一棵树上的链的权值的时候怎么办 就比如说BZOJ1036树的统计这道题目 可能诸位草率地想想线段树是可以口头AC的,But 这是在一棵树上,线段树支持的连续的区间操作 在这棵树上,如果链的编号断断续续,那么我们的线段树就和暴力没有什么区别有一点点区别了 概念 所以这里就需要用到树链剖分,这种可以支持树上链操作的数据结构 树链剖分有很多高大上的名词需要我们去记 我们先定义一些概念东东 size[u]表示

bzoj1036 count 树链剖分或LCT

这道题很久以前用树链剖分写的,最近在学LCT ,就用LCT再写了一遍,也有一些收获. 因为这道题点权可以是负数,所以在update时就要注意一下,因为平时我的0节点表示空,它的点权为0,这样可以处理点权为非负求最大值和求和的情况(即不用特判某个点是否有左右儿子,直接更新就行了),但这道题就不行(求和要求它为0,求最大值要求它为-oo).所以就必须特判~~~~ 综上:若0号节点存在一个不可能成为答案(在求最大值时是-oo,求最小值时是+oo)或对答案没有贡献的值(在求和时是0)时,初始化时将0节点

【数据结构】树链剖分

百度百科 Definition 在处理树上的链上修改与询问问题时,如果朴素地采用LCA的手段,那么询问的复杂度是\(O(logn)\),但是修改的复杂度会成为朴素地\(O(n)\),这在大部分题目中是难以接受的.用于处理树上两点间简单路径上权值和与单点子树权值和的修改以及其查询问题的数据结构与处理方法,被叫做树链剖分. Solution 考虑在一位的数列上做区间查询与修改,可以使用线段树做到每次修改\(O(logn)\)的复杂度.那么考虑在树上能否使用线段树.最简单的思想是给每个节点一个DFS序

数据结构之树链剖分

首先了解一下基本概念: 重儿子:siz[u]为v的子节点中siz值最大的,那么u就是v的重儿子.      轻儿子:v的其它子节点.      重边:点v与其重儿子的连边.      轻边:点v与其轻儿子的连边.      重链:由重边连成的路径.      轻链:轻边. 剖分后的树有如下性质:      性质1:如果(v,u)为轻边,则siz[u] * 2 < siz[v]:      性质2:从根到某一点的路径上轻链.重链的个数都不大于logN. 树链剖分,如其字面意思,就是将一棵树按照轻重