点分治
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
bzoj1468 Tree(点分治)
点分治,就是每次找到目前子树的重心,把它当做根,处理所有过重心的路径信息,然后递归处理子树。 什么是一棵树的重心呢?选出的一个点,使分出的子树中节点数最大的子树最小,就是重心。这样分出的子树点数不超过n/2+1,就可以保证复杂度了。怎么找重心呢?我们就按定义来找,每次O(n)。然后每次递归时处理过根的合法点对。怎么做呢?我们容斥一下,变成给定一个数组,问有几个有序对满足和<=K。我们可以排序+线原创 2018-01-16 10:49:33 · 306 阅读 · 0 评论 -
bzoj4372 烁烁的游戏(点分治+线段树)
无限CE…一丝丝怀疑人生qaq考虑点分树维护这个东西。每个节点x开一颗线段树,每个叶子节点i记录距离x距离为i的点加了多少。每次修改/询问在点分树上跳父亲就好了。然后还要容斥一下多加的部分,因此需要每个点再开一颗线段树表示到fa[x]距离为i的要减掉多少。 可以吧前缀加单点询问变成单点加后缀询问,这样节点可以少一些。 复杂度O(nlog2n)O(nlog2n)O(nlog^2n)空间应...原创 2018-07-14 18:26:36 · 1759 阅读 · 0 评论 -
bzoj1316 树上的询问(点分治)
询问m个长度的路径是否存在。 我们点分治,每次一个子树子树的做,拿一个数组记一下存在的长度,然后拿当前子树的长度去查询是否存在。因为长度只有1e6,所以可以直接拿一个bool数组去记。复杂度O(nlognm)O(nlognm) 如果长度1e9的话,就需要set/hash表来支持了吧qaq原创 2018-04-28 19:13:40 · 271 阅读 · 0 评论 -
hdu4812 D Tree(点分治)
求路径上所有点的点权积为K的最小的点对。(字典序最小) 点分治即可。b[x]表示前缀积为x的最小的点的标号。原创 2018-05-08 22:29:32 · 224 阅读 · 0 评论 -
bzoj5186 [Usaco2018 Jan]Cow at Large(树+dfs序+分块+BIT/点分治)
首先处理出数组mn[x],表示x到离他最近的叶子的距离。如果给定起始位置u,我们以u为根,处理出dis[x]表示x到u的距离,则节点x对答案有贡献当且仅当mn[x]<=dis[x]&&mn[fa[x]]> dis[fa[x]]。我们发现所有满足mn[x]<=dis[x]的点x构成的集合S就是由若干颗子树构成的。(除非起点u为叶子,则集合S就是这棵树本身,只含有一棵...原创 2018-03-14 14:06:37 · 778 阅读 · 0 评论 -
bzoj5192 [Usaco2018 Feb]New Barns(动态点分治)
考试时傻掉了qaq,虽然是不断加点,但是没有强制在线,我们可以离线做,把树的形态先搞出来,然后对最终的树形态直接点分治,建出重心树,然后考虑每次的加点操作为激活这个点即可。 考虑我们如何找到距x最远的激活点,假设当前根为c。则答案就是x距c的距离再加上c的不含x的子树中最深的点的距离。如何维护不含x这个要求呢?我们对每个节点记最深的点mx,最深的点所在子树mxid,和不在mxid子树中的次深的点m原创 2018-03-04 17:56:47 · 853 阅读 · 1 评论 -
bzoj4012 [HNOI2015]开店(动态点分治+二分+STL/树链剖分+主席树)
如何求所有点到一个点的距离和呢?类似bzoj3924我们的处理方法。 对于每个节点x维护 s1[x]–x的子树中的点到x的距离 s2[x]–x的子树中的点到fa[x]的距离 然后logn的在重心树上跳一跳,减去重复的,补上少的即可。 这题还有一个年龄的限制,怎么办呢?很容易想到线段树,但是我不会写gg 我们还可以利用vector+二分来做。 把所有点按年龄从小到大排序,做前缀和。每次...原创 2018-02-23 23:42:18 · 355 阅读 · 0 评论 -
bzoj3924 [Zjoi2015]幻想乡战略游戏(动态点分治)
就是求带权重心,可以修改点权。 我们首先建出重心树。对于每个节点x记 s1[x]–x的子树到x的答案, s2[x]–x的子树的点权和, s3[x]–x的子树到fa[x]的答案。 那我们就可以通过这些信息得出以x为重心的答案(在重心树上一直往上跳,复杂度O(log n).) 修改点权时,最多影响logn个点,我们就O(logn)的更新一下这些点的信息。 怎么找带权重心呢?从重心树的根开...原创 2018-02-23 21:45:27 · 508 阅读 · 0 评论 -
bzoj2599 [IOI2011]Race(点分治)
求边权和为K,且边数最少的路径。我们点分治就好了,不过据说这题卡时。。。所以我们需要一些小trick。比如说不容斥,提前记录bel,用来保证只更新合法情况。类似之前的做法,我们可以O(n)扫来更新答案,然后因为相等时我们要找最优的答案,比较麻烦。。。复杂度可能也就退化了。我们排序时如果dis相等,要把dep小的排在后面,这样我们从后往前扫遇到的第一个合法的就是最优得了。其实应该用类似dp的方法来维...原创 2018-01-17 09:55:47 · 437 阅读 · 0 评论 -
spoj1825 Free tour II(点分治)
WC时未竟的坑终于填上了orz 代码丑的惨不忍睹orz 我觉得这样还是可能会被hack,但是蒟蒻不想改了orz 按最大深度排序保证复杂度。原创 2018-02-22 22:25:26 · 379 阅读 · 0 评论 -
bzoj3435 [Wc2014]紫荆花之恋(替罪羊树+动态点分治+treap)
我们维护点分树,每个节点维护一颗平衡树,记录所有子树中的点的值。然后查询时我们往上一直跳就好了,注意要去掉不合法的情况,因此我们每个点还要再维护一个平衡树,记录所有子树中的点到fa[p]的值,往上跳的时候减掉不合法的即可。然后因为是动态生成点的,所以我们不时地要重构一下。利用替罪羊树的思想重构即可。 值得注意的几点:每次重构时,要把此次需要重构的点标记出来,在点分治dfs时不要访问不需要重构的点...原创 2018-02-27 23:16:10 · 609 阅读 · 0 评论 -
bzoj1095 [ZJOI2007]Hide 捉迷藏(括号序列+线段树/动态点分治+堆)
括号序列做法真是神神神呀qaq直接去看岛娘的博客吧:传送门。 或者直接去看noi2008国家集训队论文《数据结构的提炼与压缩》 by cqx1.20upd:终于看懂了点分治+堆的方法…orz hzwer 准确理解每个堆的意义很关键… C[x] 维护的是x所控制的子树中每个点到x在重心树中的父亲的距离 B[x] 维护的是x所控制的子树中以x的每个儿子为根的子树到x的最大距离,即在重心树中x的每原创 2018-01-19 09:44:39 · 468 阅读 · 0 评论 -
bzoj3672 [Noi2014]购票(dp+斜率优化+点分治+cdq分治)
首先考虑如果是序列怎么做,比较明显的dp,dp[i]表示i走到1的最少花费,则 dp[i]=min{dp[j]+(dis[i]−dis[j])∗p[i]+q[i]|j<i,dis[i]−dis[j]<=li[i]}dp[i]=min\{dp[j]+(dis[i]-dis[j])*p[i]+q[i] |j<i,dis[i]-dis[j]<=li[i]\} 我们自然想到斜率优化,我就不推式子了qaq原创 2018-01-18 13:40:52 · 371 阅读 · 0 评论 -
bzoj1758 [Wc2010]重建计划(二分答案+点分治+单调栈)
首先求一个最优比率的东西,我们二分答案,转化成判定是否存在一条合法路径使得边权和≥0.然后这个东西我们点分治去做。每次计算过x的合法路径的最大值时,为了避免不合法,我们一个子树一个子树的做。我们处理出g[i],表示目前这棵子树深度为i的点的最大距离,tmp[i]表示之前做过的子树深度为i的点的最大距离。我们每次用g[i]去询问tmp,也就是要在tmp[l-i,r-i]中选一个最大值,我们发现这就是一原创 2018-01-17 22:38:47 · 809 阅读 · 0 评论 -
bzoj3219 巡游(二分答案+点分治+单调队列)
求中位数最大的路径。我们二分答案,把>=mid的边都变成1,< mid的边都变成-1,如果有一条路径的权值和≥0,则中位数可以为mid。所以我们就是要去找一条权值和最大的路径。具体做法与bzoj1758相同。 我把leoly慢了8s啊,orz原创 2018-01-18 09:08:31 · 392 阅读 · 0 评论 -
bzoj3697 采药人的路径(点分治+dp)
把边权0变成-1,路径边权和为0就是阴阳平衡了。我们点分治,考虑一条过根的路径,被根分成两部分,如果是合法的,那么休息站不是在前半段,就是在后半段。我们记g[i][0]表示到根的边权和为i,且不存在休息站的路径数;g[i][1]表示存在休息站的路径数。一个一个子树的做,避免不合法的情况。用tmp[i][0/1]表示已经做过的子树的信息。则对答案的贡献就是 g[0][0]∗tmp[0][0]+∑i=原创 2018-01-17 14:29:24 · 547 阅读 · 0 评论 -
bzoj2152 聪聪可可(点分治/树形dp)
就是求路径和%3余0的有序点对个数。可以点分治。还可以树形dp。 dp[i][j]表示以i为根的子树中的点,到i的路径长度%3余j的个数。每次统计一下过i的答案就好了。点分治原创 2018-01-16 21:42:27 · 339 阅读 · 0 评论