树剖
ModestCoder_
一个modest的coder
展开
-
【题解】LuoGu4116:Qtree3
原题传送门依然是树剖,依然是线段树维护一棵线段树,seg[rt].s记录该区间内离根节点距离最近的黑点的编号seg[rt].s=0则表示该区间内无黑点那么pushup的操作就这样写:seg[rt].s = seg[ls].s ? seg[ls].s : seg[rs].s可以看出我们是优先取左儿子的信息的,因为左儿子代表的区间离根节点更近(感性理解一下就行)其他,嗯,没什么了吧Cod...原创 2019-04-04 21:26:34 · 274 阅读 · 0 评论 -
【题解】CF827D:Best Edge Weight
原题传送门首先kruskalkruskalkruskal跑出最小生成树对图中每条边进行讨论(设这条边连接的两个点为u,vu,vu,v)非树边,要使这条边成为树边,把这条边的权值最大改为u−>vu->vu−>v路径上边权最大值-1即可树边,最大边权使得这条边依然是树边,最大能达到所有连接的点的路径经过这条边的非树边的边权最小值-1如何做?非树边和树边分...原创 2019-07-30 17:42:30 · 276 阅读 · 0 评论 -
【题解】LuoGu3313:[SDOI2014]旅行
原题传送门此题不错,调了我3h,码力++第一感觉肯定是树剖了,但是这里还需要关注教派不同的问题想到对于每一个教派都开一棵线段树,维护区间最值与区间和空间可能会存不下,所以需要动态开点有许多细节问题Code:#include <bits/stdc++.h>#define maxn 100010using namespace std;struct Edge{ int ...原创 2019-04-21 09:08:43 · 262 阅读 · 0 评论 -
[题解]LuoGu2146:[NOI2015]软件包管理器
原题传送门首先,对着样例手模一遍就理解题意啦然后发现这又是一道树剖维护一颗线段树,seg[rt].sum表示该区间内安装的软件包个数安装操作,往根节点跳上去,其间所有经过的点全部状态改为安装卸载操作,自己子树包括自己状态全部改为不安装发现两中操作的答案都是delta(seg[1].sum)细节问题需要注意啦Code:#include <bits/stdc++.h>...原创 2019-04-09 20:27:28 · 282 阅读 · 0 评论 -
[题解]LuoGu3178:[HAOI2015]树上操作
原题传送门我又双叒叕来水博客啦我说了这句话说明我是真的来水的~刷刷熟练度单点修改+子树修改都是区间修改(单点当成区间)查询就是跳根啦注意:全部开longlong!虽然我不知道为什么要全开,我部分开longlong50分,全开就过了Code:#include <bits/stdc++.h>#define maxn 100010#define ls rt <<...原创 2019-04-12 21:03:43 · 206 阅读 · 0 评论 -
[题解]LuoGu2420:让我们异或吧
原题传送门树剖裸题~~查询两点路径异或和不同之处是此题为边权,采用以点代边的方式,用一条边两端点中深度更大的那个点代表这条边当然,这道题也可以用树上倍增做,非常水的一道题,不过树剖练手也是不错哒Code:#include <bits/stdc++.h>#define maxn 100010#define ls rt << 1#define rs rt &l...原创 2019-04-15 19:26:59 · 202 阅读 · 0 评论 -
[学习笔记]树链剖分
树链剖分真的不难,基础够了,简直秒懂1、前置知识线段树、树状数组等,dfs序,lca2、引入首先先放树剖模板题四个操作:1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z2 x y 表示求树从x到y结点最短路径上所有节点的值之和3 x z 表示将以x为根节点的子树内所有节点值都加上z4 x 表示求以x为根节点的子树内所有节点值之和先倒退一下难度,如果只有询问...原创 2019-04-11 20:33:28 · 537 阅读 · 4 评论 -
[题解]LuoGu4114:Qtree1
原题传送门最近在打树剖练手题啦此题与原始树剖不太一样,本来我们维护的是点权,现在我们维护的是边权,怎么办?其实只要让每一条边的两个顶点深度大的那个代表此边,这样一来,我们就可以通过维护“点权”来维护边权其余的都是跟模板一样的Code:#include <bits/stdc++.h>#define maxn 300010#define ls rt << 1#...原创 2019-04-01 20:37:38 · 221 阅读 · 0 评论 -
[题解]LuoGu3833:[SHOI2012]魔法树
原题传送门这一阶段最后一道树剖题啦,说实话我的找题能力真的烂,做了一大堆裸题(其实也就这样了吧)。两个操作两节点间路径区间加子树和就是裸题啦,不过也要注意几点爆int,开longlong需要pushdown,区间加时需要乘上区间长度另:突然发现,此题也可以用树状数组做,因为只统计子树和,这样的话只需要一个dfs序就完事了常数比线段树小哦然后这题好像不会树剖也可以做,直接...原创 2019-04-10 20:11:52 · 232 阅读 · 0 评论 -
[题解]LuoGu4092:[HEOI2016/TJOI2016]树
原题传送门又见树剖裸题!想想树剖的性质,询问一个点,往上跳,跳的一段区间一定是连续的,只要在这段区间中找出最大值就是最近的点所以只要开一个维护最大值的线段树就行啦另外需要注意根节点初始有标记Code:#include <bits/stdc++.h>#define maxn 100010#define ls rt << 1#define rs rt <...原创 2019-04-10 19:12:00 · 247 阅读 · 0 评论 -
[题解]LuoGu4315:月下“毛景树”
原题传送门其实也是一道树剖裸题啊四个操作Change:单点修改Cover:区间覆盖Add:区间加Max:区间最值是不是很裸啊,不过此题有两个特点,也是需要特别注意的地方维护边权,因为线段树维护的是点,所以我们采用以点代边的方法,用一条边两端点中深度更大的那一个点代表这条边,最终跳链跳到两点处于同一条链上时,深度更小的那个点需要id+1区间覆盖操作,要处理覆盖与加法之间的平衡...原创 2019-04-10 18:43:07 · 1472 阅读 · 1 评论 -
【题解】LuoGu2590:[ZJOI2008]树的统计
原题传送门我又双叒叕来水博客啦!又见树剖裸题,在dfs序上维护线段树,记录max值与sum值即可Code:#include <bits/stdc++.h>#define maxn 200010#define ls rt << 1#define rs rt << 1 | 1#define inf 2147483647using namespace...原创 2019-04-06 11:29:11 · 409 阅读 · 0 评论 -
【题解】LuoGu4949:最短距离
原题传送门基环树,不是特别的复杂如果先把一条多余的边拿掉,然后对于每个询问最短路径不经过多余边,直接树上求两点间距离最短路径经过多余边,树上求多余边两端点分别到两个询问点的距离,加上多余边长度两种情况比大小即可至于如何求得树上两点间距离,因为有修改操作无法直接倍增解决所以用上树剖,然后距离可以用常数更小的树状数组维护一下Code先鸽着...原创 2019-08-13 08:18:49 · 241 阅读 · 0 评论