数据结构 树链剖分
_pkm_
love coding
展开
-
树链剖分 spoj 375 Query on a tree(剖分入门)
题目链接树链剖分学习#include<bits/stdc++.h>using namespace std;#define LL long long#define cl(a,b) memset(a,b,sizeof(a))#define pb push_back#define gcd __gcdconst int maxn = 100010;const LL inf =1LL<<50;co原创 2016-05-05 14:42:20 · 352 阅读 · 0 评论 -
HDU 3966 Aragorn's Story(树链剖分 点权,树状数组)
题目链接 题意:给出一棵树,每次把路径(u,v)上的点权都加上或者减去一个值,然后问某一点的值。 树链剖分,后面可以使用线段树,也可以使用树状数组。使用树状数组的话,因为是点权,要移到边权上,所以pos初始为1。树状数组,使用了区间的更新,单点查询。 具体的过程是初始化 add(i,x),add(i+1,-x) 这样sum(x)就是x点的值了。而不会是x的前缀和了//#include<bits原创 2016-10-26 18:35:09 · 321 阅读 · 0 评论 -
poj 2763 Housewife Wind(树链剖分,边权)
题目链接 题意:给出一颗树,初始在s点,有2个操作0操作,表示求s到u路径和 1操作表示把第i条边权重变为w。树链剖分,然后用线段树维护就可以了//#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<algorithm>#include<vector>#include<queue>#include<sta原创 2016-10-27 22:29:40 · 280 阅读 · 0 评论 -
BZOJ 2243: [SDOI2011]染色 (树链剖分,点权,线段树)
题目链接树链剖分,然后直接跑一遍,线段树//#pragma comment(linker, "/STACK:102400000,102400000")#include<bits/stdc++.h>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))#define fastIO ios::sync_with_stdio(false)原创 2016-10-28 16:56:39 · 266 阅读 · 0 评论 -
BZOJ 1036: [ZJOI2008]树的统计Count(树链剖分 点权)
题目链接 题意:给出一个树,告诉每个点的权值,然后有修改操作,还有询问(u,v)路径上的最大值,(u,v)路径的和树链剖分啦,一般分为点权和边权,剖分部分不变,只是用其他数据结构处理的时候注意一下,点权可以可以转换为该点与父边的权值,就变为了边权,这样就相于给根节点来了一个虚拟的父亲(代码中不用体现),对于剖分的学习,动手自己剖分一遍,就明白了,第二个dfs就是把重边连城链,其实就是给边编号,使得原创 2016-10-26 16:17:10 · 295 阅读 · 0 评论 -
BZOJ 4034: [HAOI2015]T2(树链剖分,点权,线段树)
题目链接 题意: 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。直接跑树链剖分,我们知道剖分的第二个dfs,我的代码是getpos 中,某一个节点的子树节点编号是连续的,所原创 2016-10-29 10:49:29 · 351 阅读 · 0 评论 -
poj 3237 Tree(树链剖分,点权,线段树)
题目链接 题意:一棵树3个操作 1.chang i,v 把第i条边权值修改为v 2.negative a,b 把a到b权值取反 3.query a,b 查询a到b的边上的最大值 树链剖分就不说了,线段树,由于取反操作,所以我们同时记录下最小值,这样取反操作,就是最大的变最小了,最小的变最大了,附加一个懒惰标记。偶次反转是没变的。//#pragma comment(linker, "/STA原创 2016-10-29 12:21:28 · 308 阅读 · 0 评论 -
CF 343D D. Water Tree(树链剖分,简单题)
题目链接 题意:给出一个树;三种操作 1 v 表示把v及其子树全部变为1 2 v 表示把v及其祖先全部变为0 3 v 查询v的值 数组尽管开吧,,, 然后,祖先就是1到该点,不要想太多- - 子树的编号在剖分的编号中是连续的,[p[x],p[x]+size[x]-1]#pragma comment(linker, "/STACK:102400000,102400000")//#inc原创 2016-10-29 14:55:55 · 646 阅读 · 0 评论