
数据结构 | 树链剖分
A_Thinking_Reed_
QQ:1170827744
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
树链剖分
树链剖分用于解决树上操作问题,大致是 DFS序+线段树,没有看过的可以先了解一下。树剖把树中的儿子节点分为重儿子和轻儿子,树中链分为重链和轻链,目的是加快操作速率,降低时间复杂度。树剖的精华之处类似于LCA,跳来跳去提升效率,而且能做LCA做不到的功能,数组开了那么多还是很有用的。几个概念:重儿子:子树中节点最多的儿子节点 轻儿子:非重儿子 重链:由重儿子连成的节点 轻链:非重...原创 2019-04-10 20:47:03 · 297 阅读 · 0 评论 -
gym-102040 F Path Intersection(树链剖分)
题目:https://vjudge.net/problem/Gym-102040F题意:求树上k条路径经过的公共点的个数思路:最后的公共点一定是一段连续区间,经过的次数一定是 k 次。树链剖分,在线段树上查询数为k的个数,记录区间最大值和最小值,当最大值和最小值相等且都等于k时,整个区间有贡献。由于k比较小,没必要每次清空整棵树,记录 k 条路径,之后减去就行。代码:#inclu...原创 2019-09-23 13:53:05 · 351 阅读 · 0 评论 -
Distance on the tree (树链剖分+主席树)
题目:https://nanti.jisuanke.com/t/38229题意:树上有边权,每次查询树上两点路径上边权小于等于k的数量。思路:边权下推成点权,树剖化树为区间,区间查找小于k的数的个数。代码:#include <bits/stdc++.h>#define LL long longusing namespace std;typedef pair<...原创 2019-08-20 11:09:03 · 274 阅读 · 0 评论 -
codeforces-192-E:Fools and Roads(树链剖分 | LCA+树上差分)
题目:https://codeforces.com/problemset/problem/192/E题意:给m条路径,依次输出每条边经过的次数。思路:边权下推到点,套板子。由于最后是单点询问,可以直接用树上差分,每次给u到v的路径,u++, v++, lca(u, v)-=2,最后dfs遍历一遍即可。代码:#include <bits/stdc++.h>#defin...原创 2019-09-26 15:12:45 · 312 阅读 · 0 评论