树链剖分
wzf_2000
这个作者很懒,什么都没留下…
展开
-
Codeforces 487E Tourists
题意:给出一幅图和每个点的权值,每次修改某个点权值或询问两点间所有简单路径上的点权值最小值思路:只能看出来tarjan缩点和树剖,然后完全未考虑清楚细节。。似乎建图方法很高级首先tarjan缩点,对于每个块,新建一个点x,x向所有块内不是深度最小的点连边(借鉴(抄袭)某神犇的方法),然后深度最小的点向x连边,然后x的权值为所有块内不是深度最小的点的权值的最小值,然后询问时如果lca是新原创 2016-12-15 14:32:58 · 314 阅读 · 0 评论 -
【Codeforces226E】Noble Knight's Path
大概题意: 求树上两点间路径上第num次事件后第k个没有打过标记的点(保证一个点最多被标记一次)。显然只需要树链剖分套主席树即可,查询k个点时先跳重链在二分(也可以在主席树上直接找),询问复杂度O(log2n)O(log^2n),打标记复杂度O(logn)O(logn)#include <bits/stdc++.h>#define gc getchar()#define mid (l+r>>1原创 2017-09-26 16:39:49 · 267 阅读 · 0 评论 -
【bzoj3641】货车运输
此题就是在基环树上的询问答案分为两部分,一部分是以询问限速开过的时间,一部分是以当前路的限速开过的段。考虑离线,每次讲限速小于当前询问的限速的路段权值修改。S->T如果在去环后在同一棵树上,就直接树链+树状数组。如果不在同一棵树上就取他们到根路径的权值和和环上两种走法的较小值作为答案。环上边另开树状数组即可(claris只去一条边变为一棵树的太神了)#include原创 2017-08-04 09:20:57 · 575 阅读 · 0 评论 -
【bzoj3637】Query on a tree VI
似乎是code chef上的题,不知为何bzoj也有。题意:每个节点有颜色,刚开始可能是白色,每次修改一个点的颜色,或者询问一个点所在同色连通块的大小此题考虑维护一个点只考虑其子树时,颜色为白色和黑色的连通块大小。显然需要树链剖分+树状数组然后询问就是跳到深度最小的跟它同色的祖先。修改也是同理。然后考虑怎么找到深度最小的同色祖先。每次判断所在重链是否全为它的颜色。若是,原创 2017-08-04 09:14:13 · 303 阅读 · 0 评论 -
【codechef】Fibonacci Numbers on Tree
此题有两种做法。维护类Fibonacci前两项或者变为4个等比数列。 我用后一种,死活过不去。跟miaom前一种AC程序拍不出错。 有知道的请在评论中告诉我,非常感谢。原创 2017-08-05 09:41:25 · 466 阅读 · 0 评论 -
【BZOJ4876】 [Zjoi2017]线段树
zjoi2017 day2T2原创 2017-05-07 14:20:57 · 738 阅读 · 0 评论 -
【BZOJ1036】[ZJOI2008]树的统计Count
树链剖分原创 2016-07-19 16:21:13 · 410 阅读 · 1 评论 -
【BZOJ1103】[POI2007]大都市meg
树剖原创 2016-07-19 16:28:52 · 448 阅读 · 0 评论 -
【BZOJ3631】[JLOI2014]松鼠的新家
题目大意:从编号1到n遍历图(中间经过点不算遍历过),求每个点经过了几次树剖,每次i到i+1都相当于一次链上修改,最后单点查询就行。#include #include #include #include #define N 300009#define inf 0x7fffff#define ll long longusing namespace std;int n,numb原创 2016-07-19 16:35:58 · 334 阅读 · 0 评论 -
UVALive 4839 HDU 3686 Traffic Real Time Query System
题意:给出一幅图,询问从一条边到另一条有几个点必被经过没看题解思路完全不对。。似乎知道了tarjan的新姿势思路:首先按边跑tarjan。然后记录一下每条边在哪一个块中,记录一下割点;然后建图:对于每个割点所在的块中(每个割点肯定在多个块中),建一个新点跟它们连边;然后就是一棵树啦,当然到树剖啦。然后询问就是统计一条链上的割点有多少啦(缩点基本是抄袭)代码:#inclu原创 2016-12-15 14:03:14 · 276 阅读 · 0 评论 -
【Codeforces696E】...Wait for it...
一个一个删,树剖线段树上维护即可。#include <bits/stdc++.h>#define gc getchar()#define ll long long#define mid (l+r>>1)#define inf (ll)2e18#define N 100009#define root 1,1,n#define lc cur<<1#define rc lc|1#defi原创 2017-10-26 14:16:28 · 292 阅读 · 0 评论