树 - 树链剖分
NotFound1
这个作者很懒,什么都没留下…
展开
-
|BZOJ 1036|树链剖分|线段树|[ZJOI2008]树的统计Count
bzoj 1036树剖+线段树。第一个树剖题,终于AC#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define fo(i, j, k) for (i=(j);i<=(k);i++) #define fd(i, k, j) for (i=(k);i>=(j);i--) #define rd(a) sc原创 2017-05-15 19:53:53 · 389 阅读 · 0 评论 -
|poj 2763|LCA, 树状数组|或者|树链剖分, 线段树|Housewife Wind
poj 2763LCA+树状数组/线段树。首先本题大致一看就是一个LCA,但是本题有操作更改某边的权,这样会使得原本的far数组变化,不难发现,更改边权后影响该边下面所有点的答案。此时可以在LCA的DFS预处理时求出DFS序列(即时间戳),找到每个点管辖的范围,修改边权相当于修改该边连接的两个点深度深的那个点所管辖的范围,此时修改可以用暴力,但是由于far数组与LCA本身查询无关,我们可以用数据结构原创 2017-05-09 20:12:07 · 670 阅读 · 0 评论 -
|hdu 3966|树链剖分|线段树|Aragorn's Story
hdu 3966裸树剖+线段树维护,while写成if, 数组开小搞得我调试了好久。。静态查错真的不能快了#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<algorithm> #define fo(i, j, k) for (i=(j);i<=(原创 2017-05-18 18:44:24 · 395 阅读 · 0 评论 -
|poj 3237|树链剖分|线段树|Tree
poj 3237树剖+线段树。 刚开始想用记录该区域被NEGATE了几次,结果发现不可行,翻别人博客发现了原来维护最大值maxvmaxv和最小值minvminv,NEGATE就是maxv=−minv,minv=maxvmaxv=-minv, minv=maxv, 正确性显然。 #include<cstdio> #include<cstring> #include<algorithm> #defin原创 2017-05-18 21:00:19 · 409 阅读 · 0 评论 -
|BZOJ 4034|树链剖分|线段树|[HAOI2015]树上操作
BZOJ 4034树剖后线段树维护。 此题要修改子树的权,根据树剖性质子树是连续的一段,运用时间戳思想即可。注意开long long,第一次没开就WA了(痛不欲生)#include<cstdio> #include<cstring> #include<algorithm> #define fo(i, j, k) for (i=(j);i<=(k);i++) #define fd(i, k, j)原创 2017-05-19 20:28:22 · 445 阅读 · 0 评论 -
|算法讨论|树链剖分 学习笔记
模板及讲解 树链剖分解决树上的修改问题。 将树剖成一条条链,再用线段树、树状数组等维护#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define fo(i, j, k) for (i=(j);i<=(k);i++) #define fd(i, k, j) for (i=(k);i>=(j);i--原创 2017-05-15 21:03:55 · 369 阅读 · 0 评论 -
|BZOJ 4196|树链剖分|线段树|[Noi2015]软件包管理器
BZOJ 4196树链剖分支持修改查找子树和到根的路径权值和即可解决,注意pushdown放前面注意lc,rc会爆的情况#include<cstdio> #include<cstring> #include<algorithm> #define fo(i, j, k) for (i=(j);i<=(k);i++) #define fd(i, k, j) for (i=(k);i>=(j);i--)原创 2017-05-20 20:43:48 · 407 阅读 · 0 评论 -
|BZOJ 3531|树链剖分|动态开点线段树|[Sdoi2014]旅行
BZOJ 3531树剖以后每个宗教建立一棵线段树,节点太多用传统方法开数组肯定不行,这里进行改进,使用了动态开点线段树,即需要这个点再开这个点。#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define ms(i, j) memset(i, j, sizeof i) #define ll long l原创 2017-06-06 18:46:24 · 511 阅读 · 2 评论