树链剖分
_Ark
这个作者很懒,什么都没留下…
展开
-
Luogu 4751 动态DP 模板
题面动态求最大独立集题解树剖后用矩阵转移。具体见Tweetuzki的洛谷博客CODE#include <bits/stdc++.h>using namespace std;typedef long long LL;char cb[1<<15],*cs=cb,*ct=cb;#define getc() (cs==ct&&(ct=(cs=cb...原创 2019-10-28 17:26:50 · 224 阅读 · 0 评论 -
BZOJ3083 遥远的国度 (树链剖分 换根子树求min)
题意传送门题解除去树剖模板,问题就是换根。写LCT?要维护子树信息比较麻烦。树剖仍然可以做。我们还是按111为根树剖。对于询问分一下类,假设当前点为uuu,根为rtrtrt:u=rtu=rtu=rt,直接询问整棵树。rtrtrt不在uuu子树内,则uuu在以rtrtrt为根时的子树和以111为根时的子树相同,直接查询子树。rtrtrt在uuu子树内,那么一定可以找到uuu的儿子v...原创 2019-09-12 15:58:59 · 140 阅读 · 0 评论 -
BZOJ 1758 / Luogu P4292 [WC2010]重建计划 (分数规划(二分/迭代) + 长链剖分/点分治)
题意自己看.分析求这个平均值的最大值就是分数规划,二分一下就变成了求一条长度在[L,R]内路径的权值和最大.首先这是一棵树,显然点分治是可写的然鹅我并不是很想(会)写点分治因此这里有另一种方法先对树长链剖分,我们像做dsu on tree一样先做长链,用线段树继承长链的全部信息,然后做其他儿子查询的时候枚举一下路径的长度len,左半边单点O(1)O(1)O(1)查询长度为len的最大...原创 2019-03-28 10:51:31 · 208 阅读 · 0 评论 -
BZOJ 3881[COCI2015]Divljak (AC自动机+dfs序+lca+BIT)
显然是用AC自动机先构建好AC自动机,当B中插入新的串时就在trie上跑,对于当前点,首先这个点所代表的串一定出现过,然后这个点指向的fail也一定出现过.那么我们把每个点fail当作父亲,建一棵fail树,那么到一个点一定会让fail树中这个点到根的路径所有点的答案+1.然后因为在同一个串中多次出现只算一次,那么就需要求这些到根的路径的并集.可以用树链剖分求区间交集做.但这道题我们只用单点查...原创 2019-03-29 21:33:25 · 168 阅读 · 0 评论 -
BZOJ 3626 [LNOI2014]LCA 树剖+(离线+线段树 // 在线+主席树)
BZOJ 4012 [HNOI2015]开店 的弱化版,离线了,而且没有边权(长度).两种做法1 树剖+离线+线段树这道题求的是一个点zzz与[l,r][l,r][l,r]内所有点的lcalcalca的深度之和.可以发现,dep[lca(u,v)]dep[lca(u,v)]dep[lca(u,v)]就等于从uuu到根与从vvv到根的路径的交集路径的长度.那么只要把[l,r][l,r][l,r...原创 2019-03-25 22:13:05 · 172 阅读 · 0 评论 -
BZOJ 2243: [SDOI2011]染色 (树剖+线段树)
树链剖分后两个区间合并的时候就判一下相交颜色是否相同来算颜色段数就行了.CODE#include <vector>#include <queue>#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using names...原创 2019-03-25 20:37:53 · 158 阅读 · 0 评论 -
BZOJ 1984: 月下“毛景树” (树链剖分+线段树)
注意赋值和加法的标记下传优先级.具体看代码.CODE#include <vector>#include <queue>#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using namespace std;type...原创 2019-03-25 19:34:52 · 196 阅读 · 0 评论 -
uoj30【CF Round #278】Tourists(圆方树+树链剖分+可删除堆)
…学习了一波圆方树学习了一波点分治学习了一波可删除堆(巧用 ? STL)传送门: Icefox_zhx注意看代码看怎么构建圆方树的.tips:tips:tips:圆方树内存记得开两倍CODE#include <vector>#include <queue>#include <cstdio>#include <cctype>...原创 2019-03-25 17:28:12 · 256 阅读 · 0 评论 -
BZOJ 3531: [Sdoi2014]旅行 (树剖+动态开点线段树)
对于每种信仰维护一棵动态开点线段树就行了…#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;inline void read(int &num) { c...原创 2019-03-25 11:36:31 · 132 阅读 · 0 评论 -
BZOJ 2836: 魔法树 (树链剖分+线段树)
板题…记得开longlong#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;inline void read(int &num) { char ch;...原创 2019-03-25 10:49:52 · 137 阅读 · 0 评论 -
BZOJ 2157: 旅游 (树链剖分+线段树)
树链剖分后线段树维护区间最大最小值与和. 支持单点修改与区间取反.直接写个区间取反标记就行了.线段树板题.(1A警告)#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using namespace std;typedef long long ...原创 2019-03-25 10:08:34 · 216 阅读 · 0 评论 -
BZOJ 4127: Abs (树链剖分 线段树求区间绝对值之和 带区间加法)
题意给定一棵树,设计数据结构支持以下操作1 u v d 表示将路径 (u,v) 加d(d>=0)2 u v 表示询问路径 (u,v) 上点权绝对值的和分析绝对值之和不好处理,那么我们开两棵线段树,一个存正数,一个存负数.然后对于两棵线段树,都要维护子树sz(有效节点数),sum(有效节点权值之和),lz(加法懒标记).特别的,因为负数可能会加到正数,那么修改一个区间的时候,询...原创 2019-03-25 08:46:25 · 683 阅读 · 0 评论 -
BZOJ 3672[NOI2014]购票(树链剖分+线段树维护凸包+斜率优化) + BZOJ 2402 陶陶的难题II (树链剖分+线段树维护凸包+分数规划+斜率优化)
前言刚开始看着两道题感觉头皮发麻,后来看看题解,发现挺好理解,只是代码有点长。BZOJ 3672[NOI2014]购票中文题面,题意略: BZOJ 3672[NOI2014]购票设f(i)f(i)f(i)表示iii点所花的最小费用,可以写出方程式f(i)=min{&amp;amp;nbsp;f(j)+pi(disi−disj)+qi&amp;amp;nbsp;}f(i)=min\{\ f(j)+p_i(dis_i-d...原创 2019-03-07 21:02:43 · 561 阅读 · 0 评论 -
BZOJ 3589 动态树 (树链剖分+线段树)
前言众所周知,90%90\%90%的题目与解法毫无关系。题意有一棵有根树,两种操作。一种是子树内每一个点的权值加上一个同一个数,另一种是查询多条路径的并的点权之和。分析很容易看出是树链剖分+线段树的题目,唯一的问题就是多条路径可能有交集。那么我们只要把每条路径拆成多个部分,每一部分是某重链上连续的一段,就得到了很多区间。然后排序取并集就能在线段树上操作了。AC CODE#incl...原创 2019-03-07 20:03:50 · 324 阅读 · 0 评论