推荐博客:https://www.cnblogs.com/ivanovcraft/p/9019090.html 前置知识: dfs序,线段树 主要应用:树上有关问题的维护,将书上问题转化为序列问题从而用线段树进行统计维护 大概过程: 1,dfs1计算Size[x]数组(表示x这个树的大小),d数组( ...
分类:
其他好文 时间:
2020-02-23 09:48:00
阅读次数:
45
[TOC] 例题 "完美的集合" 技巧 点数 边数=1 现在如果你要在树上统计某种特定集合的数量,有一种比较简单的方法就是统计包括某个点的集合数量,加起来,减去包括某条边的集合,就可以得出最后的集合了。 DFS序转移 如果要求你在树上背包你打算怎么办,神犇就给出了一个很好的方法。 一个集合利用合并从 ...
分类:
其他好文 时间:
2020-02-09 20:16:30
阅读次数:
119
dfs序编号后跑权值主席树 但写起来是真的麻烦,总是wa,只能拿出模板过了 ...
分类:
其他好文 时间:
2020-02-05 13:46:47
阅读次数:
53
其实用不上树链剖分也行,就普通的lca题目 但是经过这道题可以看出树链剖分也可以解决LCA的题目, 注意ptn是dfn的反查,这样能够快速得到dfs序中相应的节点 ...
分类:
其他好文 时间:
2020-02-05 13:33:50
阅读次数:
51
"C题地址:大小接近的点对" 分析题目: 方法一: 在dfs序上,树状数组维护每个数出现的次数;因为在dfs序上根比它的子孙先遍历到(遍历到根时,还没加入遍历孩子) 题目要统计 u是v的祖先时,dfs序就保证了,"在遍历到的结点x是根,而接下来遍历的都是它的子孙", 递归思想,叶节点先计算完,再向父 ...
分类:
编程语言 时间:
2020-01-25 18:19:37
阅读次数:
90
"B题地址:树上逆序对" 有两个思路 方法一:线段树离线 + 树状数组或者线段树维护区间和 0:离散化,离线存储输入的operation操作序列。 ①:先线段树在dfs序上离线处理好整一棵树:在dfs序上先查询"加入当前结点的逆序对权值和"并记录,再加入当前这个节点;dfs完毕后,就已经记录好每个结 ...
分类:
编程语言 时间:
2020-01-25 16:55:25
阅读次数:
91
「SPOJ1487」Query on a tree III "传送门" 把树的 $\text{dfs}$ 序抠出来,子树的节点的编号位于一段连续区间,然后直接上建主席树区间第 $k$ 大即可。 参考代码: ...
分类:
其他好文 时间:
2020-01-24 00:05:47
阅读次数:
90
题意: 一个公司有n个员工,每个员工都有一个上司,一个人下属的下属也是这个人的下属,因此可将他们的关系看成一棵树, 然后给定两种操作,C操作是查询当前员工的工作,T操作是将y工作分配给x员工,当一个人得到y工作时,他的 员工也会得到这个工作,即这个点和他的子树的工作都变成y。 链接: http:// ...
分类:
其他好文 时间:
2020-01-23 15:34:21
阅读次数:
96
理解题意后分两种情况: 1.b在a的上方: min(dep[p] 1,k) (ll)siz[p] 因为(p点上方肯定有父亲结点b,我们不用管b是谁) 2.b在a的下方: (dep(p)+1 ~ dep(p)+k矩形框内的所有点子树个数和 所以思路:主席树维护同一深度下的各个结点子树个数和;下标是深度 ...
分类:
其他好文 时间:
2020-01-23 15:24:48
阅读次数:
54
不知道为什么会RE。。 待补 思路:链上求u和v两点路径第k小利用lca就转变为了 U+V LCA FA(LCA) 上的第k小,这因为每个点的主席树的root是从其父转移来的。可以用树链剖分求lca;在dfs序上建立主席树将树上问题转变为区间问题,询问的时候用主席树求区间k小值。 终于能写出这种题了 ...
分类:
其他好文 时间:
2020-01-23 12:35:32
阅读次数:
88