可持久化线段树
文章平均质量分 84
thy_asdf
我也不知道说什么...
展开
-
bzoj4012: [HNOI2015]开店
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4012 思路:首先我们考虑一个简化的问题: 给定一棵树,每次询问所有点到一个点的距离和。 画个图就能知道:距离和=所有点到根的距离和+点数*u到根的距离-每个点与u的lca到根的距离*2 于是问题就成了求lca的dis和 那么我们先对每个点,把它到根的路径覆盖原创 2015-12-18 12:23:23 · 3410 阅读 · 0 评论 -
bzoj3514: Codechef MARCH14 GERALD07加强版
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3514 思路:这题思路很巧妙 首先每个连通块只要保留一棵生成树的边就可以保证连通了 把每条边的编号当做边权 我们把每条边按顺序加入,维护一个每个连通块的最大生成树 每次替换树上路径的最小边 把它替换的边的编号记录到一个数组a[i]中,如果连通了两个连通块,a[i]=0原创 2016-01-14 16:40:41 · 1267 阅读 · 0 评论 -
bzoj2653: middle
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2653 思路:陈老师的题 可持久化线段树的又一种应用 对于每次询问,二分答案 我们怎么知道它是大于中位数还是小于中位数呢? 我们把每个小于它的赋成-1,大于等于赋为1 查询左端点在[a,b]右端点在[c,d]的区间的最大子段和 若小于0,则偏大,大于等于0,偏小或者正好 我们建原创 2016-04-26 10:14:43 · 368 阅读 · 0 评论 -
bzoj4539: [Hnoi2016]树
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4539 思路:首先把大树缩点,一个点代表一次操作复制的子树 两个点之间的边权值就是两个子树的根在大树中的距离,这个可以在原树中用倍增求出 至于从大树标号转成原树标号,就相当于求子树内编号第k大的点的编号,用可持久化线段树即可。 询问的话,就先把两个点移到对应复制操作的子树的根,计算距离原创 2016-04-20 19:25:06 · 1061 阅读 · 0 评论