
树链剖分
SaltyFishWei
这个作者很懒,什么都没留下…
展开
-
POJ1986 Distance Queries(树链剖分LCA)
个人认为是树链剖分求lca的基本题目,当然其他方法也可以做。 大意:给出一棵n个节点的树,k(1<=k<=10000)个询问,每次询问树上两点的距离(每条道路后面输入的那个字母根本没什么卵用) 首先预处理每个节点i到根节点的距离,然后dis(i,j)=dis(i,root)+dis(j,root)−2∗dis(lca(i,j),root)dis(i,j)=dis(i,root)+dis(j,ro原创 2016-03-05 17:08:32 · 651 阅读 · 0 评论 -
HDU5274 Dylans loves tree(树链剖分线段树)
给定n个节点的树,q次操作(1≤n,q≤105)(1 \leq n,q \leq 10^5),每个节点的权值0≤a[i]≤1050 \leq a[i] \leq 10^5。 操作分两类 0 x y 表示把编号为x的节点权值修改为y 1 x y 表示询问x到y的路径上出现的每一种点权是否都出现了偶数次,若是输出-1,否者输出那个 出现奇数次的点权(保证每次询问最多经过1种出现次数为奇数的点原创 2016-03-05 17:41:17 · 435 阅读 · 0 评论 -
FZU2082 过路费(树链剖分线段树)
如果只是查询没有修改就好做了,只需要找lca。加上修改操作之后可以使用树链剖分+线段树,注意把边权下放到点权,因此需要特别注意:当我们执行lca操作时,如果u = v那么直接返回路径长度;如果u ≠ v,则说明此时uv(假设dep[u]>dep[v])在一条重链上,返回的路径长度还需要加上dis(u,son[v])(son[v]是v的重儿子)。#include#include#incl原创 2016-03-06 20:15:31 · 356 阅读 · 0 评论