树链剖分
文章平均质量分 50
Michael_GLF
AFOing
展开
-
【TJOI2018】 异或(可持久化01Trie+树链剖分)
传送门 【题目分析】 可持久化Trie与主席树其实没啥太大的实现上的差别,因为一次只会插入一个串,也就只会在前一个版本的Trie上改变一条链,那么其他儿子就可以与主席树类似的操作直接继承。 那么如何判断两个版本之间是否有一个串呢?我们对每个节点记一个size,只要后一个版本该节点的size>前一个版本该节点的size,那么就一定至少有一个串经过了当前节点。 有了这个东西我们就可以直接...原创 2019-11-14 08:21:31 · 318 阅读 · 0 评论 -
洛谷3258 松鼠的新家(树链剖分)
传送门 【题目分析】 比较裸的一道树链剖分。。。 相当于实现路径加1,单点查询,树链剖分+线段树维护一下即可。 【代码~】 #include<bits/stdc++.h> using namespace std; const int MAXN=3e5+10; const int MAXM=6e5+10; int n,m,cnt; int a[MAXN]; int head...原创 2018-10-31 08:28:21 · 162 阅读 · 0 评论 -
洛谷2146【NOI2015】 软件包管理器(树链剖分)
传送门 【题目分析】 树链剖分+一点点小变化。 用0表示未安装,1表示已安装。 首先根据给出的关系建树,每一次install(x)操作相当于询问1~x这条路径上有多少个为0的点,直接统计为1的点的个数再用深度去减一下即可,然后将这条路径上的所有点变为1;每一次uninstall(x)操作相当于询问x的子树中有多少为1的点,然后将子树中所有点变为0。 所以支持区间覆盖操作,路径修改路径查询...原创 2018-10-30 21:55:41 · 150 阅读 · 0 评论 -
洛谷1600 天天爱跑步(树链剖分)
啊哈~ 【题目分析】 哇这真的是DAY1T2吗。。。。。感觉要被强行劝退了。。。。。qwq 首先对于树上的路径s->t,我们都可以将其拆为s->lca(s,t)->t,我们用dona数组作为记录贡献的桶。 考虑一个点i能被观察到的情况,分为两种: 1.存在一条路径s->lca(s,t),且depth[i]+val[i](即原题的w)=depth[s] 2.存在一...原创 2018-10-24 22:02:19 · 201 阅读 · 0 评论 -
洛谷1505 旅游(树链剖分)
QAQ 【题目分析】 一道裸的剖分被一个极度sb的错误卡了两天。。。。。。 题意很明显,维护5个操作:单点修改,区间取相反数,区间求和,区间求最大值,区间求最小值。 因为求一条路径,考虑树链剖分维护(注意dfs序时优先dfs重儿子!!!这样在线段树上的编号才连续!!!) 考虑第一个操作,对于一条路径,如果修改了他的权值,那么只会对深度较浅的一个点向下走、深度较深的向上走会产生影响,所以单...原创 2018-10-23 21:01:27 · 214 阅读 · 0 评论 -
WOJ2232 树上修改4(方法同上上篇,树剖)
【题目描述】 有n个节点N-1条边,这是一颗树,有2个操作: 1 x v:表示将节点x的权值+v 2 x y:表示查询x到y的路径权值和 【输入格式】 第一行是数N,表示N个节点,接下一行是n个数,表示每个节点的初始权值。 接下来n-1行,每行描述了n-1条边。 接下来是一个数q表示有q次查询与询问 接下来q行,格式如题 【输出格式】 对于每次询问,输出路径权值和。 【样例输入...原创 2018-10-07 16:45:17 · 138 阅读 · 0 评论 -
WOJ2231 树上修改3(没有2是什么鬼,方法同上一篇)
树上修改1传送门:https://blog.csdn.net/g21glf/article/details/82958565 【题目描述】 有n个节点N-1条边,这是一颗树,有2个操作: 1 x y v:表示将节点x到y最短路径上所有的点的权值+v 2 x:表示查询子树x的权值和 开始的时候每个节点的权值是0 【输入格式】 第一行是数N,表示N个节点 接下来n-1行,每行描述了n-1...原创 2018-10-07 16:17:28 · 190 阅读 · 0 评论 -
BZOJ1036 树的统计(树链剖分+线段树)
【题目描述】 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身 【输入格式】 输入...原创 2018-10-07 12:00:53 · 256 阅读 · 0 评论 -
NOIP模拟 相遇(LCA+树状数组+dfs序)
【题目描述】 豪哥生活在一个n个点的树形城市里面,每一天都要走来走去。虽然走的是比较的多,但是豪哥在这个城市里面的朋友并不是很多。 当某一天,猴哥给他展现了一下大佬风范之后,豪哥决定要获得一些交往机会来提升交往能力。豪哥现在已经物色上了一条友,打算和它(豪哥并不让吃瓜群众知道性别)交往。豪哥现在spy了一下这个人的所有行程起点和终点,豪哥打算从终点开始走到起点与其相遇。但是豪哥是想找话题的,他...原创 2018-10-05 15:57:21 · 279 阅读 · 0 评论 -
洛谷4315 月下“毛景树”(树链剖分)
传送门 【题目分析】 手残一时爽,代码调一天。。。。。。。。样例都是假的QAQ 与旅游这道题类似,都是权值在路径上,所以将权值赋给深度较深的点,注意查询和更新时不能计算lca。 这道题相当于支持单点修改、区间覆盖、区间加、区间求最大值,常规操作。 【代码~】 #include<bits/stdc++.h> using namespace std; const int MA...原创 2018-11-01 10:45:39 · 208 阅读 · 0 评论 -
洛谷3128 最大流(树链剖分)
传送门 【题目分析】 蒟蒻并不会树上差分。。。。。所以只能用树链剖分套线段树维护。。。。。 对于每条路径,都相当于将所有经过的点+1,最后查询最大值即可。 【代码~】 #include<bits/stdc++.h> using namespace std; const int MAXN=5e4+10; const int MAXM=1e5+10; int n,q,cnt;...原创 2018-11-02 08:21:32 · 154 阅读 · 0 评论 -
洛谷3250 网络(树链剖分+堆)
传送门 【题目分析】 维护非常巧妙。。。。看了看网上的做法才知道每个节点可以维护一个堆qwq 每次询问相当于求不经过该点路径的最大权值,所以考虑每次加入一条路径的时候,将除这条路径上的所有点更新即可。 所以就用堆来维护。。。开两个堆,一个维护压入堆的元素,一个维护出堆的元素,查询时就从top开始往下找直到第一个不同的地方或者出堆的size为0。 【代码~】 #include<b...原创 2018-11-02 21:02:19 · 172 阅读 · 0 评论 -
洛谷4281 【AHOI2008】紧急集合/聚会(结论题)
传送门 【题目分析】 为什么校内OJ树剖和倍增都被卡T两个点。。。。qwq 大力枚举+画图可以发现,答案一定是三个点的两两LCA中的一个,直接大力枚举就可以了。 详细的证明过程可以参考一下这篇博客: 传送门 【代码~】 #include<bits/stdc++.h> using namespace std; const int MAXN=5e5+10; const in...原创 2019-01-23 15:11:03 · 273 阅读 · 0 评论 -
校内OJ3784 【模板】树链剖分换根(树链剖分)
传送门 【题目分析】 不同于上一个换根的题,这道题求的是子树最小值。 所以我想了很久。。。。。。还想着将子树全部改为INF再一个一个更新回去。。。。 我好菜啊qwq 其实就只用在1~dfn[las]-1和dfn[las]+siz[las]~n之间取最小值就行了嘛。。。。 qwq 【代码~】 #include<bits/stdc++.h> using namespace...原创 2019-01-22 11:30:59 · 299 阅读 · 0 评论 -
BZOJ2238 mst(最小生成树+树链剖分)
传送门 【题目分析】 树剖好题。 首先按题意做出最小生成树,如果做不出,那么所有询问都是"Not connected"。 同样,如果删的是非生成树上的边,对答案不会造成影响,直接输出最小生成树的权值即可。 那么考虑生成树上的边被删的情况: 很明显,对于一个环上的所有边,如果删掉一条,剩下的点仍然会保持联通。 所以这个环上的所有边都是可以互相替代的。 按照这个思路,我们将所有非生成树...原创 2019-01-21 10:55:05 · 475 阅读 · 0 评论 -
洛谷3976 【TJOI2015】旅游(树链剖分)
传送门 【题目分析】 考试3h30min,40min打完T2,就对着这道和T3发懵。。。。。。 讲道理昨天我看见这道题就丢了。。。。。 首先题意简直令人想打出题人,语文水平果然很重要。。。。 其实只能在这条路径上买一次宝石、卖一次宝石,所以就是求最大差值。 但这道题要考虑路径是有向的,所以将路径拆为u->lca和lca->v,query的时候直接传结构体就行了。。。 然后...原创 2019-01-20 16:13:14 · 179 阅读 · 1 评论 -
洛谷3178 【HAOI2015】树上操作(树链剖分)
传送门 【题目分析】 树链剖分板题吧。 操作都很常规,单点加直接在线段树上修改,子树加就是将区间dfn[x]~dfn[x]+siz[x]-1内的所有值加key,最后路径求和即可。 注意开long long。 【代码~】 #include<bits/stdc++.h> using namespace std; typedef long long LL; const LL M...原创 2019-01-19 15:17:22 · 154 阅读 · 0 评论 -
洛谷2486 【SDOI2011】染色(线段树+树链剖分)
传送门 【题目分析】 果然重构才是真理吗。。。。。 因为涉及路径操作,所以考虑树链剖分,线段树维护题意中的: 1.区间颜色段数。 2.区间左右颜色。 3.区间覆盖标记。 因为线段树的问题主要就是考虑push_up和push_down,此题push_up时记得将区间左右颜色赋值,然后合并的时候注意如果左区间右端颜色与右区间左端颜色相同的话那么颜色段数要-1,push_down时如果有区...原创 2018-12-30 15:24:43 · 151 阅读 · 0 评论 -
BZOJ3732 Network(最小生成树+树链剖分)
传送门 【题目分析】 首先是要最大路径最小,那么很容易想到可以用最小生成树来实现,留下最小的n-1条边,保证了图的联通。 然后我们就得到了一颗最小生成树,要询问任意两点路径最大值,就是树链剖分维护就好了。 整体较板,但注意做最小生成树的时候因为一开始我存了双向边结果一排序就T的飞起,所以注意最小生成树的边并不用双向,做kruskal连边的时候才建双向边。 【代码~】 #include...原创 2018-12-15 14:51:35 · 215 阅读 · 0 评论 -
NOIP模拟 相交(树链剖分+树状数组维护)
内网传送门 【题目分析】 我已经无力爆粗了。。。。。。。md这c++怎么能在编译了、运行了以后,最后发现居然是之前的版本?喵喵喵? 考虑两条路径相交,那么其中一条的lca一定在另一条路径上。所以开两个树状数组维护之前路径的信息和之前路径的lca的位置。统计一下,然后更新,再做下一条路径即可。 【代码~】 #include<bits/stdc++.h> using names...原创 2018-11-05 14:09:13 · 179 阅读 · 0 评论 -
洛谷4180 【模板】严格次小生成树(最小生成树+树链剖分)
传送门 【题目分析】 首先明确一点:严格次小生成树与最小生成树有且只有一条边不同。 证明比较显然,自己画画图就行了,因为能替换的一定会构成一个环,依据这个就可以推出来。 同样,根据上面这个结论,我们可以枚举所有边,如果这条边不在生成树上,那么如果将这条边加入生成树中一定就会构成一个环,这时候只用将环上最大边删去即可,但考虑到严格次小生成树并且最大边可能与当前边权值相同,所以还要记录次大值。...原创 2019-02-06 17:30:05 · 489 阅读 · 0 评论