题目
- LCT
完成情况 | 题目 | 出处 |
---|---|---|
LCT AC | Bounce 弹飞绵羊 | BZOJ 2002 [HNOI2010] |
Cave 洞穴勘测 | BZOJ 2049 [SDOI2008] | |
链剖AC | 树的统计 Count | BZOJ 1036 [ZJOI2008] |
Housewife Wind | POJ 2763 | |
魔法森林 | BZOJ 3669 [NOI2014] |
- 可持久化数据结构
完成情况 | 题目 | 出处 |
---|---|---|
平衡树AC | 普通平衡树 | Tyvj 1728 |
郁闷的出纳员 | BZOJ 1503 [NOI2004] | |
Persistent Bookcase | Codeforces Round #368 707D | |
AC | K-th Number | POJ 2104 |
花神的嘲讽计划Ⅰ | BZOJ 3207 | |
Couriers | BZOJ 3524 [POI2014] | |
AC | Count on a tree | BZOJ 2588 SPOJ 10628 |
谈笑风生 | BZOJ 3653 | |
权限题 | 简单题 | BZOJ 2683 |
权限题 | Peaks加强版 | BZOJ 3551 [ONTAK2010] |
AC | MEX-Query | Codeforces Gym 101237A |
GERALD07加强版 | BZOJ 3514 [Codechef MARCH14] | |
任务查询系统 | BZOJ 3932 [CQOI2015] | |
Gty的妹子序列 | BZOJ 3744 | |
可持久化并查集(&加强版) | BZOJ 3673-3674 | |
Dynamic Rankings | BZOJ1901 ZJU2112 | |
网络管理 Network | BZOJ 1146 [CTSC2008] | |
最大异或和 | BZOJ 3261 | |
ALO | BZOJ 3166 [HEOI2013] | |
XRQRS | BZOJ 4546 Codechef |
LCT
写都还写不来,只有口胡了
- bzoj2002 [Hnoi2010]Bounce 弹飞绵羊
一个点到 root 的链上就是他的轨迹,所以改的时候,只需要 cut 后 access 就可以了。并且答案是左子树 size+1 。
- bzoj2049 [Sdoi2008]Cave 洞穴勘测
强行把
x
的树拉到另一颗树中,然后
- bzoj1036 [ZJOI2008]树的统计Count
对于修改,只用 splay 他就直接改。而对于链查询,我们把u换成辅助树的根,然后 access 并 splay ,就可以了。对于修改,像之前一样,打标记。
- poj2763 Housewife Wind
边权不好做,那么就把边变成一个点,就是新加一个 val 为边权的点就可以了。
- bzoj3669 [NOI2014]魔法森林
对于有序的的
a
,我们需要维护
可持久化数据结构:
- Codeforces Round #368 (Div. 2) D
注意到操作只有对行的,所以强行可持久化(开一个巨大的二维数组)。
- bzoj3207 花神的嘲讽计划Ⅰ
Hash 后在主席树上查存在。
- bzoj3524 [Poi2014]Couriers
注意到,区间众数的话,他的那边的数的个数一定比另一边要多,所以我们每次往多的儿子走。查到最后就是答案。(也可以用线段树维护矩阵,然后用众数的方法搞)
- bzoj2588 Spoj 10628. Count on a tree
针对每一点建他到 root 的主席树,那么可以由他的父亲转移,只用改那一条链就可以了。答案应该是 ansu+ansv−anslca−ansfalca 。当然,这个如果 lca 就是 root 那么就不用减后面的那个了。还有要注意一点,就是传的时候要传 root 的值,害得我调了好久。
- bzoj3653 谈笑风生
我们把答案分成
a
为
- bzoj2683 简单题:
动态主席树,强行开新的点。
- bzoj3551 ONTAK2010 Peaks加强版
就是对于这样的图,一定只有最小生成树上的边有用,所以,我们建出最小生成树,然后化边为点,这样得到图是一种神奇的图。他的性质是:
1.二叉树(好吧这题意义不大)
2.原树与新树两点间路径上边权(点权)的最大值相等
3.子节点的边权小于等于父亲节点(大根堆)
4.原树中两点之间路径上边权的最大值等于新树上两点的
LCA
的点权
所以对于每一个询问,答案就是他到
lca
与
lca
到
ans
的路上的最小值,这样,
dfs
序上搞。
- Gym - 101237A - MEX-Query
区间mex,这个与之前的众数有点像,但是我们主席树中存这个值出现的最右位置,这样就可以一直向一边查询了。原理是:每个叶子节点存这个值出现的最右边的值,然后合并时按照min合并,查的时候只用查r那棵树,然后根据最值来搞。(因为避免了值的重复)。
- bzoj3514 Codechef MARCH14 GERALD07加强版
预处理出每条边可以替代那条边。然后 lct 解决。
- bzoj3932 [CQOI2015]任务查询系统
每个任务的时间一定是一个区间,所以,利用差分的思想,在
l
时加入一个任务,
- bzoj3744 Gty的妹子序列
先分块处理出单独一块的答案,然后对于零散的点,直接主席树暴力算就可以了。
- bzoj3673 可持久化并查集 by zky && bzoj3674 可持久化并查集加强版
并查集实际上就是一个数组。那么这道题就是可持久化数组,你连可持久化线段树都会了,那还不会可持久化数组?但是这道题还要注意,应该用按秩合并,才能支持回滚。
- bzoj1146 [CTSC2008]网络管理
树状数组套主席树。带修主席树模板题。
可持久化Trie:(类似主席树,只不过是0,1区间)
- bzoj3261 最大异或和
记录一个前缀和(之所以不记后缀是因为后缀在变),然后用 trie 常用的贪心法求解。所以要用到可持久化 trie 。
- bzoj3166 [HEOI2013]ALO
先预处理出每个点作为次小值的区间,然后在 [l,i−1] , [i+1,r] 两个区间上查答案。至于预处理,先把元素从大到小排序,在一个个加入,这样类似 odt 的方式就可以了。
- bzoj4546 codechef XRQRS
可以写可持久化 trie 与主席树结合。但是实际上不用主席树。因为可持久化 trie 也可以表示大小。(相当于二进制的主席树)