![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树链剖分
文章平均质量分 87
YH_YML
もし世界が色を変えて 帰り道が分からなくても 行かなくちゃ
展开
-
BZOJ 1036 [ZJOI2008]树的统计Count==树剖裸题
题目传送门:233333 直接把那棵树剖开来,剖成一条条的链,然后直接用两棵线段树维护就好了啊 不会树链剖分的出门左拐。 然后你会撞到墙上2333. 树剖思路: 设size为以该节点为根的子树的结点个数,对于每一个不是叶子节点的节点,在儿子中选出一个size最大的作为重儿子,那条边叫做重链。 之后再一次dfs,优先搜索重儿子,整理出搜索顺序之后就会发现,连在一起的重原创 2016-07-19 15:50:34 · 229 阅读 · 0 评论 -
BZOJ 3631 [JLOI2014]松鼠的新家==树剖
题目传送门:23333 十分考验树剖的本事 在网上看到几个大神写树剖T掉了233333 主要是树剖,剖完后把一条路上的点不停地打永久标记,不用向下推,查询时直接把flag加起来就好了。 另外除了第一个点外其余点都要减一,中间的点进入会拿一颗糖,出时也会计算一个,所以要减去。 最后一个房间的糖题目说了不用,所以也要减。 (虽说被这个坑了好久QAQ) #inclu原创 2016-07-19 19:26:36 · 363 阅读 · 0 评论 -
BZOJ 1103: [POI2007]大都市meg==树剖
题目传送门:23333 我是用树剖写的,剖边不剖点,就是正常的树剖。 只不过把第一个节点不计入线段树里。 只是数据有点大开数组要节省(其实一般都不会炸,但不知为何我经常MLE)。 但听说还有别的做法来节省代码量,就像我神奇的同桌的隔走廊同桌所说的那样。 似乎叫做链上求和,详情百度。 #include #include #include #include #def原创 2016-07-19 17:41:07 · 230 阅读 · 0 评论 -
BZOJ 4196 [Noi2015]软件包管理器
题目传送门:2333333 还是裸的树剖题。 每个点0=没下载,1=已下载 下载就是查找这个点到零的路径上有几个0,再把整条路修改成1。 卸载就是查找这个点子树中有几个1,再把整棵子树改为0。 再发现一颗子树在dfs序里面是连续的一串(自己脑补), 所以就变成了线段树区间赋值+求和,随便就过了。 #include #include #include #inclu原创 2016-07-19 20:55:19 · 219 阅读 · 0 评论 -
BZOJ 2243 [SDOI2011]染色==树链剖分
题目传送门:233333 学会了树剖之后这道题就主要看线段树的本事了 先树剖,开线段树维护区间的颜色段数量以及最左端和最右端的颜色。 合并是考虑相邻的两种颜色,如果颜色相同则ans--。 在处理树剖时要看好哪一端颜色和哪一端相连,才可以正确的合并。 ---------------------------乌龟天空游----------------------------- 最好在原创 2016-07-20 15:45:13 · 289 阅读 · 0 评论 -
CodeForces - 487E Tourists
题意:询问两点任意路径上点权的最小值,可修改点权 先把所有点双处理一下=造一个新点向所有分量内的点连边,取其中一个点作为父亲,权值是除父亲外点权的最小值(修改时同时修改父亲)=于是可见,任意点双内都是可以乱走的,所以走过新建店相当于对该分量内所有点取min,同时lca为新建点是还要把它爸算进去 取min什么的好像有什么multiset=(十分害怕 #include #inc原创 2016-12-14 13:23:24 · 349 阅读 · 0 评论 -
[LNOI 2014] LCA
方案一:[a,b] 的lca和可以变成[1,a] 与 [1,b] 的答案和。 于是离线。 copied from wlc1121 方案二: 询问的是区间,于是想到莫队 树剖+线段树同上维护。 我自己没写过一个根号*两个log==QAQ留给底层优化大师去实现吧... ---------分割线--------- (隔壁q234rty说可以用欧拉序列去掉一个log) (原创 2017-03-02 21:04:30 · 277 阅读 · 0 评论