感觉这个题的思想还是很妙的,刚开始看这道题的时候大概会向一些树的算法比如树链剖分或是主席树维护深度之类的方向去想,但是我们考虑它实际上是一个二维数点的问题,由于是子树的修改,我们很自然的会想到用DFS序来搞,那么对于一个子树深度不超过定值的所有点就被包含在了一个矩形中,这样我们就可以用KD_tree ...
分类:
其他好文 时间:
2017-05-15 19:38:25
阅读次数:
229
直接复制gconeice的题解吧 显然,暴力求解的复杂度是无法承受的。考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。观察到,深度其实就是上面有几个已标记了的点(包括自身)。所以,我们不妨把 z 到根的路径上的点全部 ...
分类:
其他好文 时间:
2017-05-13 11:18:08
阅读次数:
165
树链剖分求LCA 树链剖分需要将树的边分为重边和轻边。每个节点和他的儿子之间只能有一条重边,连接着该节点与他儿子中子树节点最大的一个。一系列连续起来的重边叫做重链,重链上的每个点的top值都是重链的顶端节点。 用树链剖分来求LCA,就需要每次比较top_x与top_y的深度,将深度较大的点变为top ...
分类:
其他好文 时间:
2017-05-05 21:50:54
阅读次数:
165
先将权值离散。 显然可以对于每个结点建一棵权值线段树存这个点到根结点的路径上的点权,询问时在线段树上二分,但这样时间是O(n2log2n)的。 然后想到用主席树优化,时间复杂度O(n*log2n)。 代码: 1 #include<iostream> 2 #include<cstdio> 3 #inc ...
分类:
其他好文 时间:
2017-05-04 18:33:02
阅读次数:
194
首先注意到这样一个事实。 树上两个点(u,v)的LCA的深度,可以转化为先将u到根路径点权都加1,然后求v到根路径上的总点权值。 并且该题支持离线。那么我们可以把一个区间询问拆成两个前缀和形式的询问。 现在问题就变成了求[1,r]和x的LCA深度之和。实际上就是把[1,r]到根路径点权点1,然后求x ...
分类:
其他好文 时间:
2017-05-04 18:29:37
阅读次数:
176
Descrption 一棵树,给一条路径增加权值,询问子树和.\(n\leqslant 10^5\) Solution 树链剖分. 划水... Code ...
分类:
其他好文 时间:
2017-05-03 21:57:35
阅读次数:
187
Game Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1376 Accepted Submission(s): 449 Problem Des ...
分类:
其他好文 时间:
2017-04-29 22:12:01
阅读次数:
172
4034: [HAOI2015]树上操作 Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x ...
分类:
其他好文 时间:
2017-04-29 17:33:46
阅读次数:
396
题目链接:hdu 4757 Tree 题目大意:给定一棵树,每一个节点有一个值。如今有Q次询问,每次询问u到v路径上节点值与w亦或值的最大值。 解题思路:刚開始以为是树链剖分,事实上树链剖分仅仅是用来求LCA(能够不用树链剖分)。 可持久化字典树。在每次插入的同一时候,不改动原先的节点。而是对全部改 ...
分类:
其他好文 时间:
2017-04-28 20:33:41
阅读次数:
192