您的位置:首页 > 其它

12.1 省选训练总结2(1) 点分治/平衡树

2017-12-01 09:59 183 查看

目录

点分治

完成情况题目出处
TreePOJ 1741
权限题RaceBZOJ 2599 [IOI2011]
AC聪聪可可BZOJ 2152
D TreeHDU 4812
Amaz1ng PrimeCDOJ 1562
权限题采药人的路径BZOJ 3679
Attack and DefenceOsipovsky Cup 2014

Splay

完成情况题目出处
AC普通平衡树BZOJ 3224 Tyvj 1728
AC宠物收养所BZOJ 1208 [HNOI2004]
Book 书架BZOJ 1861 [ZJOI2006]
永无乡BZOJ 2733 [HNOI2012]
Army FormationsHDU 6133
AC文艺平衡树BZOJ 3223 Tyvj 1729
ACCards SortingCodeforces 830B (#424)

完成情况截图

聪聪可可



普通平衡树



文艺平衡树



宠物收养所



Cards Sorting



点分治

首先找重心,然后对过了重心的路径计算,最后递归点分。

前4道题是点分裸题,就不赘述。

Amazing Prime

给定一棵树,边带权(0或者1),问你树上有多少条路径满足权值之和为素数。

对于每一个答案,计算式:

num[x]=f[0]∗f[x]+f[1]∗f[x−1]+...+f[x]∗f[0]

所以对于所有num,做卷积(需要FFT)。

采药人的路径

给你一棵树,边带权(1或者−1),问你树上有多少条路径满足边权和为零,且存在一个中间点,使得该点到路径两个端点的边权和都为零。

这个题首先我们把前缀和中有和这个前缀和相等的,给他打标记。这样意思就是说到重心的路上有一个可以作为中间点的。

然后可以匹配的点分四类:

为0没有标记:所有其他树上的0。

为0有标记:所有其他树上的0和重心。

不为0没有标记:有标记的相反数。

不为0有标记:所有相反数。

Attack and Defence

给你一棵树,每个点有一个左括号或者右括号,问你树上能够完美匹配的路径数量(l→r,r→l 视作不同路径)。

首先(→1,)→−1。

合法的左半边:前缀和均大于0。

合法的右半边:前缀和均小于0。

然后一般的点分思想,只是不合法的就不计答案并且不加入维护。

Splay

Splay通过大量的Splay逐渐使其平衡。Splay可做几乎所有动态的区间操作问题。

普通平衡树,文艺平衡树,以及宠物收养所是板题,就不总结。

Book 书架

给定初始时书架上从上往下的书本的编号,维护这个书架,支持放到顶,放到底,前移一个,后移一个,询问。

首先左右设置足够大的空间,然后放到底放到顶就放到左右的空位,前后移就是和前驱后继交换。

永无乡

维护一张点带权无向图,支持连接某两个点,询问某个连通块内权值的K小值是多少。

一个纯纯的无旋Treap好不好!当然也可以Splay启发式合并。

Army Formations

给你一颗树,每个结点的儿子数不超过2。每个结点有一个权值,一个结点的代价被定义为将其子树中所有结点的权值放入数组从大到小排序后,每个权值乘以其下标的和。让你计算所有结点的代价。

启发式合并!每一次将Splay大小较小的结点的权值全提取出来塞到较大的里面。每一个有点大的值会使一些小值后移,后移一个的增加代价就是他自己。

Cards Sorting

一列卡片,一个人,每次从卡片的最左端开始,依次看过去,如果它是当前的全局最小值,那么将它移除,如果不是,那么将它放到序列的最右端。持续到序列为空为止。问你他进行的这两种操作的总次数。

首先想法是找到最小值,把最小值前的区间活摘下来放到末尾。细思发现只需要Splay删除点到根然后交换左右子树就好了!

总结

树上路径问题可以考虑点分治,主要考虑如何求跨过重心的路径,细节要注意多考虑,包括是否选入重心、是否算重等等。

Splay可以解决大多数区间动态操作。应熟练掌握模板!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: