随笔分类 -  数据结构 - 线段树合并

摘要:题目大意:给定一棵 1~n 标号的树。Tree[L,R]表示最少需要选择的边的数量使得 L~R 号点两两连通。求: $$ \sum_{L=1}^{n} \sum_{R=L}^{n} \operatorname{Tree}[L, R] $$ 题解: 要求的是经过边的数量,可以考虑每条边对答案的贡献。 阅读全文
posted @ 2019-06-15 18:02 shellpicker 阅读(348) 评论(0) 推荐(0)
摘要:题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,点有点权,求对于每个节点为根的子树中,出现次数最多的点权的和是多少。 题解:子树询问问题可以采用离线+线段树合并 线段树维护区间颜色出现次数最大值和区间颜色出现次数最大的点权和,合并通过比较左右子区间出现的最大次数讨论即可。 代码如下 cp 阅读全文
posted @ 2019-06-11 17:52 shellpicker 阅读(224) 评论(0) 推荐(0)
摘要:题目大意:给定一个 N 个点的森林,M 个询问,每次询问对于点 u 来说,有多少个点和 u 有相同的 K 级祖先。 题解:线段树合并适合处理子树贡献的问题。 发现要回答这个询问在点 u 处计算很困难,但是在 u 的 k 级祖先处处理询问很简单,即:问对于 v 子树中深度为 k 的节点的个数。因此,采 阅读全文
posted @ 2019-06-06 17:01 shellpicker 阅读(328) 评论(0) 推荐(0)
摘要:题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,现给出 Q 个询问,每次询问距离 u 号节点不超过 K 的节点 b,c 为 a 与 b 的后代,求这样的三元组有多少个。 题解:学会了线段树合并。 由于之前对线段树合并理解的不深刻,导致狂 WA 不止QAQ。 需要统计 $$ \sum_{d 阅读全文
posted @ 2019-04-22 15:48 shellpicker 阅读(246) 评论(0) 推荐(0)
摘要:题目大意:给定一棵 N 个点的树,点有点权,求对于每个点来说,以该点为根的子树内比该点点权小的点的个数。 题解:考虑对于每个点开一棵权值线段树。递归过程中,将子树的信息合并到父节点上,统计答案后,再将父节点信息加入权值线段树即可。 代码如下 cpp include define pb push_ba 阅读全文
posted @ 2019-04-21 21:12 shellpicker 阅读(279) 评论(0) 推荐(0)