随笔分类 -  点分治

摘要:重写一遍很久以前写过的题。 考虑链上的问题。容易想到设f[i]为i到1的最少购票费用,转移有f[i]=min{f[j]+(dep[i]-dep[j])*p[i]+q[i]} (dep[i]-dep[j]<=l[i])。套路的考虑若j转移优于k(dep[j]>dep[k]),则f[j]-dep[j]* 阅读全文
posted @ 2019-05-29 21:51 Gloid 阅读(257) 评论(0) 推荐(0)
摘要:建出点分树,每个节点维护其作为点分树上lca对子树内点的贡献,线段树维护即可,同时另开一个线段树以减掉父亲重复的贡献。 阅读全文
posted @ 2019-01-19 19:31 Gloid 阅读(216) 评论(0) 推荐(0)
摘要:点分治,每次考虑包含根的连通块,做树形多重背包即可,dfs序优化。注意题面给的di范围是假的,坑了我0.5h,心态炸了。 阅读全文
posted @ 2019-01-18 12:11 Gloid 阅读(288) 评论(0) 推荐(0)
摘要:考虑点分治。对子树按照根部颜色排序,每次处理一种颜色的子树,对同色和不同色两种情况分别做一遍即可,单调队列优化。但是注意到这里每次使用单调队列的复杂度是O(之前的子树最大深度+该子树深度),一不小心就退化成O(n2)。于是我们按照同颜色最大深度为第一关键字、子树深度为第二关键字排序,每次处理完一种颜 阅读全文
posted @ 2018-11-23 21:17 Gloid 阅读(284) 评论(0) 推荐(0)
摘要:要统计所有路径的信息,那我们考虑点分治,每次算经过分治中心的路径的贡献。然而路径的颜色数量实在是不好统计,既然只需要求从每个点出发的所有路径的颜色数量之和,那换一种思路,改为求从每个点出发包含某种颜色的路径数量之和。这两者显然是等价的。 考虑在点分治过程中怎么算这个东西。首先算出每种颜色被多少条由根 阅读全文
posted @ 2018-08-02 18:30 Gloid 阅读(283) 评论(0) 推荐(0)