前置知识:线段树,链式前向星,LCA,DFS序 树链剖分通常的操作: 1.x y 的路径上修改 2.x y 的路径上查询 3. 对于 x 的子树修改 4.对于 x 的子树查询。 一般还有换根操作。树剖也也可以做LCA。 树链剖分有两个DFS 这两个DFS就是把一棵树变成一个序列。 然后就可以用数据结 ...
分类:
其他好文 时间:
2019-10-03 16:12:30
阅读次数:
81
"bzoj" 先考虑离线做法,可以按深度离线,然后按照深度顺序加点,那么询问就可以变成在$dep_x+d$深度时进行子树查询.现在考虑一个点,它可以给所有它的祖先答案+1,但是如果有一个同色的点,那么在他们的$lca$处以及$lca$祖先只会有$1$的贡献,所以加入一个点就单点+1,加入一个同色点要 ...
分类:
其他好文 时间:
2019-09-16 23:55:04
阅读次数:
178
Treap 普通二叉搜索树(BST) 对于任一棵子树,根节点权值大于左子树所有结点的权值,小于右子树所有结点权值 1. 结点结构体&初始化函数 3. 右旋 4. 左旋 5. 插入 与BST大致相同,只是在把val插入到左子树或右子树时,要根据dat来维护Treap,即通过左旋或右旋调整使得堆性质成立 ...
分类:
其他好文 时间:
2019-08-08 20:59:36
阅读次数:
91
dsu,对于无修改子树查询,并且操作支持undo的问题 暴力dfs,对于每个节点,对所有轻儿子dfs下去,然后再消除轻儿子的影响 dfs重儿子,然后dfs暴力恢复轻儿子们的影响,再把当前节点影响算进去 就有了整棵子树的信息了,时间复杂度O(nlogn) 经典例题:http://codeforces. ...
分类:
其他好文 时间:
2019-06-24 12:28:39
阅读次数:
112
并查集:就是有求并集,查找元素属于哪个集合的功能。 1、路径压缩:使X到根上的每一个节点的父节点都变为根节点。 查询: 合并: 2、按秩合并:使较浅的树成为较深的树的子树。 查询: 合并: 例题:hdu1232 解法一:路径压缩 #include<iostream> #include<cstdio> ...
分类:
其他好文 时间:
2019-02-03 12:53:33
阅读次数:
201
"LINK" 题目大意 给你一棵树 让你支持子树染色,子树查询颜色个数,颜色数 using namespace std; // //typename typedef long long ll; //convenient for define fu(a, b, c) for (int a = b; a ...
分类:
其他好文 时间:
2018-10-19 21:57:05
阅读次数:
140
E. Lomsat gelral http://codeforces.com/contest/600/problem/E 题意: 求每个子树内出现次数最多的颜色(如果最多的颜色出现次数相同,将颜色编号求和)。 分析: dsu on tree。 这个可以解决一系列不带修改的子树查询问题。 考虑暴力的思 ...
分类:
其他好文 时间:
2018-09-27 10:36:21
阅读次数:
142
Part I 静态主席树 定义 主席树最基础可以维护区间K大的问题,由于其本质是可持久化线段树,所以要对线段树有很深的理解。 栗子:区间第K小 首先这种处理区间的问题肯定要想到区间数据结构。显然如果是指定了区间,可以把读入的数据离散化,然后建一颗值域线段树。 但是要在任意的[l,r]中查询第k小,一 ...
分类:
其他好文 时间:
2018-05-12 22:34:47
阅读次数:
222
Description 给定一棵大小为 n 的有根点权树,支持以下操作: ? 换根 ? 修改点权 ? 查询子树最小值 Solution 单点修改子树查询的话可以想到用dfs序+线段树来处理,换根的处理画一画图应该可以明白: 如果查询的x是当前的根rt,直接返回整棵树的min 如果rt在x的子树中,用 ...
分类:
其他好文 时间:
2017-05-31 20:50:02
阅读次数:
249
4530: [Bjoi2014]大融合 拿这题作为lct子树查询的练手。本来以为这会是一个大知识点,结果好像只是一个小技巧? 多维护一个虚边连接着的子树大小即可。 #include<cstdio> #include<cstring> #include<algorithm> #define MN 21 ...
分类:
其他好文 时间:
2017-04-18 09:42:13
阅读次数:
221