Icefox的博客

生活不止眼前的苟且,还有诗和远方。

bzoj4372 烁烁的游戏(点分治+线段树)

无限CE…一丝丝怀疑人生qaq 考虑点分树维护这个东西。每个节点x开一颗线段树,每个叶子节点i记录距离x距离为i的点加了多少。每次修改/询问在点分树上跳父亲就好了。然后还要容斥一下多加的部分,因此需要每个点再开一颗线段树表示到fa[x]距离为i的要减掉多少。 可以吧前缀加单点询问变成单点加后缀...

2018-07-14 18:26:36

阅读数:989

评论数:0

hdu4812 D Tree(点分治)

求路径上所有点的点权积为K的最小的点对。(字典序最小) 点分治即可。b[x]表示前缀积为x的最小的点的标号。

2018-05-08 22:29:32

阅读数:35

评论数:0

bzoj1316 树上的询问(点分治)

询问m个长度的路径是否存在。 我们点分治,每次一个子树子树的做,拿一个数组记一下存在的长度,然后拿当前子树的长度去查询是否存在。因为长度只有1e6,所以可以直接拿一个bool数组去记。复杂度O(nlognm)O(nlognm) 如果长度1e9的话,就需要set/hash表来支持了吧qaq

2018-04-28 19:13:40

阅读数:44

评论数: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]]> ...

2018-03-14 14:06:37

阅读数:187

评论数:0

bzoj5192 [Usaco2018 Feb]New Barns(动态点分治)

考试时傻掉了qaq,虽然是不断加点,但是没有强制在线,我们可以离线做,把树的形态先搞出来,然后对最终的树形态直接点分治,建出重心树,然后考虑每次的加点操作为激活这个点即可。 考虑我们如何找到距x最远的激活点,假设当前根为c。则答案就是x距c的距离再加上c的不含x的子树中最深的点的距离。如何维护不...

2018-03-04 17:56:47

阅读数:286

评论数:1

bzoj3435 [Wc2014]紫荆花之恋(替罪羊树+动态点分治+treap)

我们维护点分树,每个节点维护一颗平衡树,记录所有子树中的点的值。然后查询时我们往上一直跳就好了,注意要去掉不合法的情况,因此我们每个点还要再维护一个平衡树,记录所有子树中的点到fa[p]的值,往上跳的时候减掉不合法的即可。然后因为是动态生成点的,所以我们不时地要重构一下。利用替罪羊树的思想重构即可...

2018-02-27 23:16:10

阅读数:126

评论数:0

bzoj4012 [HNOI2015]开店(动态点分治+二分+STL/树链剖分+主席树)

如何求所有点到一个点的距离和呢?类似bzoj3924我们的处理方法。 对于每个节点x维护 s1[x]–x的子树中的点到x的距离 s2[x]–x的子树中的点到fa[x]的距离 然后logn的在重心树上跳一跳,减去重复的,补上少的即可。 这题还有一个年龄的限制,怎么办呢?很容易想到线段树,但...

2018-02-23 23:42:18

阅读数:95

评论数:0

bzoj3924 [Zjoi2015]幻想乡战略游戏(动态点分治)

就是求带权重心,可以修改点权。 我们首先建出重心树。对于每个节点x记 s1[x]–x的子树到x的答案, s2[x]–x的子树的点权和, s3[x]–x的子树到fa[x]的答案。 那我们就可以通过这些信息得出以x为重心的答案(在重心树上一直往上跳,复杂度O(log n).) 修改点权时,...

2018-02-23 21:45:27

阅读数:121

评论数:0

spoj1825 Free tour II(点分治)

WC时未竟的坑终于填上了orz 代码丑的惨不忍睹orz 我觉得这样还是可能会被hack,但是蒟蒻不想改了orz 按最大深度排序保证复杂度。

2018-02-22 22:25:26

阅读数:77

评论数:0

bzoj1095 [ZJOI2007]Hide 捉迷藏(括号序列+线段树/动态点分治+堆)

括号序列做法真是神神神呀qaq直接去看岛娘的博客吧:传送门。 或者直接去看noi2008国家集训队论文《数据结构的提炼与压缩》 by cqx1.20upd:终于看懂了点分治+堆的方法…orz hzwer 准确理解每个堆的意义很关键… C[x] 维护的是x所控制的子树中每个点到x在重心树中的父...

2018-01-19 09:44:39

阅读数:158

评论数: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]-di...

2018-01-18 13:40:52

阅读数:92

评论数:0

bzoj3219 巡游(二分答案+点分治+单调队列)

求中位数最大的路径。我们二分答案,把>=mid的边都变成1,< mid的边都变成-1,如果有一条路径的权值和≥0,则中位数可以为mid。所以我们就是要去找一条权值和最大的路径。具体做法与bzoj1758相同。 我把leoly慢了8s啊,orz

2018-01-18 09:08:31

阅读数:101

评论数:0

bzoj1758 [Wc2010]重建计划(二分答案+点分治+单调栈)

首先求一个最优比率的东西,我们二分答案,转化成判定是否存在一条合法路径使得边权和≥0.然后这个东西我们点分治去做。每次计算过x的合法路径的最大值时,为了避免不合法,我们一个子树一个子树的做。我们处理出g[i],表示目前这棵子树深度为i的点的最大距离,tmp[i]表示之前做过的子树深度为i的点的最大...

2018-01-17 22:38:47

阅读数:141

评论数:0

bzoj3697 采药人的路径(点分治+dp)

把边权0变成-1,路径边权和为0就是阴阳平衡了。我们点分治,考虑一条过根的路径,被根分成两部分,如果是合法的,那么休息站不是在前半段,就是在后半段。我们记g[i][0]表示到根的边权和为i,且不存在休息站的路径数;g[i][1]表示存在休息站的路径数。一个一个子树的做,避免不合法的情况。用tmp[...

2018-01-17 14:29:24

阅读数:174

评论数:0

bzoj2599 [IOI2011]Race(点分治)

求边权和为K,且边数最少的路径。我们点分治就好了,不过据说这题卡时。。。所以我们需要一些小trick。比如说不容斥,提前记录bel,用来保证只更新合法情况。类似之前的做法,我们可以O(n)扫来更新答案,然后因为相等时我们要找最优的答案,比较麻烦。。。复杂度可能也就退化了。我们排序时如果dis相等,...

2018-01-17 09:55:47

阅读数:239

评论数:0

bzoj2152 聪聪可可(点分治/树形dp)

就是求路径和%3余0的有序点对个数。可以点分治。还可以树形dp。 dp[i][j]表示以i为根的子树中的点,到i的路径长度%3余j的个数。每次统计一下过i的答案就好了。点分治

2018-01-16 21:42:27

阅读数:93

评论数:0

bzoj1468 Tree(点分治)

点分治,就是每次找到目前子树的重心,把它当做根,处理所有过重心的路径信息,然后递归处理子树。 什么是一棵树的重心呢?选出的一个点,使分出的子树中节点数最大的子树最小,就是重心。这样分出的子树点数不超过n/2+1,就可以保证复杂度了。怎么找重心呢?我们就按定义来找,每次O(n)。然后每次递归时处理...

2018-01-16 10:49:33

阅读数:95

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭