随笔分类 -  树链剖分

摘要:https://www.cnblogs.com/Gloid/p/9412357.html差分一下是一样的问题。感觉几年没写过树剖了。 阅读全文
posted @ 2019-04-17 21:39 Gloid 阅读(172) 评论(0) 推荐(0)
摘要:显然容斥后转化为求树链的交。这个题非常良心的保证了查询的路径都是到祖先的,求交就很休闲了。 阅读全文
posted @ 2019-01-18 22:14 Gloid 阅读(187) 评论(0) 推荐(0)
摘要:先考虑NOI2014的水题,显然从高位到低位贪心,算一下该位取0和1分别得到什么即可。 加强这个水题,变成询问区间。那么线段树维护该位取0和1从左到右和从右到左走完这个节点表示的区间会变成什么即可,也滋磁修改了。 然后上树,显然树剖即可。非常惨的变成了O(nklog2n)。压一下位就不惨了,变成O( 阅读全文
posted @ 2018-11-20 18:42 Gloid 阅读(167) 评论(0) 推荐(0)
摘要:即滋磁单点修改,询问路径上小于某数的值有多少个。暴力树剖套个主席树(或者直接树上主席树,似乎就1个log了?感觉不一定比两个log快)即可,然而不太优美。 开始觉得可以cdq,然而就变成log^3了。冷静一下感觉简直是个弱智,修改本身就是单调的,只要对询问离线即可。树剖+BIT即可维护。 阅读全文
posted @ 2018-10-30 14:42 Gloid 阅读(193) 评论(0) 推荐(0)
摘要:考虑对于每一个点维护子树内与其连通的点的信息。为了换色需要,记录每个点黑白两种情况下子树内连通块的大小。 查询时,找到深度最浅的同色祖先即可,这可以比较简单的树剖+线段树乱搞一下(似乎就是qtree3),具体的,可以维护一下区间是否全黑/白,线段树上二分。换色会造成一个连通块分裂并产生新连通块,这只 阅读全文
posted @ 2018-09-29 03:15 Gloid 阅读(201) 评论(0) 推荐(0)
摘要:考虑暴力树剖。那么修改路径和查询子树最小值非常简单。 对于换根当然不能真的给他转一下,我们只记录当前根是哪个。对于查询,如果查询点不在当前根到原根的路径上,显然换根是对答案没有影响的;如果是当前根,答案就是整棵树最小值,否则即是要查询该路径上的后代所在子树外的点的最小值,去掉这段区间就可以了。 阅读全文
posted @ 2018-09-14 13:37 Gloid 阅读(118) 评论(0) 推荐(0)
摘要:某两个点间的请求只对不在这条路径上的询问有影响。那么容易想到每次修改除该路径上的所有点的答案。对每个点建个两个堆,其中一个用来删除,线段树维护即可。由于一条路径在树剖后的dfs序中是log个区间,所以其补集也是log个区间。 然而由于复杂度是O(nlog3n)的以及蒟蒻自带大常数,在luogu上T了 阅读全文
posted @ 2018-08-16 01:51 Gloid 阅读(158) 评论(0) 推荐(0)
摘要:先不考虑换根。考虑修改某个点权值对答案的影响。显然这只会改变其祖先的子树权值和,设某祖先原子树权值和为s,修改后权值增加了x,则对答案的影响为(s+x)2-s2=2sx+x2。可以发现只要维护每个点到根的路径的子树和之和就可以了,随便树剖一波。 对于换根,可以发现这也只会改变其祖先的子树权值和。设原 阅读全文
posted @ 2018-08-15 13:45 Gloid 阅读(158) 评论(0) 推荐(0)
摘要:开店简化版。 阅读全文
posted @ 2018-08-03 10:19 Gloid 阅读(205) 评论(0) 推荐(0)
摘要:考虑这样一个问题:一棵树初始全是白点,有两种操作:把一个点染黑;询问某点到所有黑点的距离之和。 注意到树上两点x和y的距离为depth[x]+depth[y]-depth[lca(x,y)]*2。要求出上面的东西,depth[x]+depth[y]可以很简单的算出来,关键在于depth[lca(x, 阅读全文
posted @ 2018-08-03 02:58 Gloid 阅读(251) 评论(0) 推荐(0)