传送门~ 树链剖分,顾名思义,就是把树分成链。 通过这个方法,可以优化对树上两点间路径、某一点子树的修改和查询的操作,等。 流程 $dfs1()$ 在这个函数中,要处理出每个节点的: 深度dep[] 父亲fa[] 大小siz[] 重儿子编号hson[] 一个节点的siz[],是包括它自己、它的儿子、 ...
分类:
其他好文 时间:
2019-07-23 13:23:45
阅读次数:
95
树链剖分 前言 :虽然noip基本不考,但我觉得还是多少学一点吧 问题模型 对于树上的某条路径,进行一系列操作(类似线段树上的操作) 实现原理 恰如其名,将树剖分成一段又一段的区间(树链),便于我们进行线段树的操作( 树上的线段树操作 )。将树分为重链和轻链,重链的dfs序(与其他dfs序不同,树剖 ...
分类:
其他好文 时间:
2019-07-21 13:20:15
阅读次数:
98
Description 给定一棵树和若干操作,每次可以选取树上任意两点之间的路径染成一种颜色,或是查询任意两点之间路径上有多少段颜色。 Solution 树链剖分不解释,主要分析线段树的维护,在线段树区间上我们维护区间左端的颜色、右端的颜色、整个区间颜色段的数量。那么当我们合并两个区间时,我们首先将 ...
分类:
其他好文 时间:
2019-07-14 14:58:20
阅读次数:
63
HDU - 5390 看到的第一感觉就是树链剖分 + 线段树套字典树, 感觉复杂度不太对。 其实这种路径其实很特殊, 一个点改变只会影响它儿子到根的路径, 并且这种求最优值问题可以叠加。 所以我们修改的时候对对应dfs序打标记, 询问的时候在线段树上从上往下对每个对应区间求个最优值。 这样还会被卡M ...
分类:
其他好文 时间:
2019-07-14 11:12:06
阅读次数:
73
HDU - 5405 答案相当于权值之和的平方减去把两点路径上的点扣掉以后所有子树的平方和。 然后用线段树维护每个点的轻儿子的权值平方和。 维护起来相当恶心, 我写了一晚上才调出来。。 ...
分类:
其他好文 时间:
2019-07-13 13:52:02
阅读次数:
110
题意: 给你一棵树,和树上边的权值,在有q组询问a,b,问你从节点a->节点1的路径上,不小于b的最大的边的权值是多少,输出 离线维护最大值线段树即可 模板题 #include<bits/stdc++.h> using namespace std; //input by bxd #define re ...
分类:
其他好文 时间:
2019-07-12 12:43:42
阅读次数:
73
题目传送门 省选D2T3考板子可真是不多见呢。。。。~~~ 这题就是一个裸的树链剖分,对于每一个Add操作,维护从u至v的路径,对于每一个Query操作,询问以u为根的子树之和。如果不会树链剖分可以看我的往期博客,具体细节在代码之中就不多赘述了~ 下面给出参考代码: ...
分类:
其他好文 时间:
2019-07-07 09:36:03
阅读次数:
111
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1036 树链剖分的板子题,在bzoj上做到就当复习啦 ...
分类:
其他好文 时间:
2019-07-01 19:55:57
阅读次数:
105
这题可能是QZC论文中最板子的题了。。 我们只需要把边权记在比边深的点上,然后便就是树链剖分的板子了。。 由于题目卡语言。。以下代码需要转C才能过。。 cpp include using namespace std; const int N = 10005; int dep[N],siz[N],fa ...
分类:
其他好文 时间:
2019-06-09 09:16:06
阅读次数:
79