摘要:
BZOJ 3673——可持久化并查集by zky 不同于普通并查集的是 可持久化并查集是在主席树上实现的, 原理与普通并查集一样。 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define 阅读全文
摘要:
BZOJ 2152 Luogu 2634——聪聪可可 题意 求两点之间路径和为3的倍数占的概率(最简) 解题思路与BZOJ1468差不多, 不过本题在计算经过某个点的次数时用了个ans数组, 对路径长度模3,得到的是0或1或2,但仍需要去重。 返回的值应是ans[0]*ans[0]+ans[1]*a 阅读全文
摘要:
Doubling Algorithm——倍增算法 是一种可以优化时间复杂度的神奇的算法,可以用它来求LCA等等。 基本思想: deep[i] 表示 i节点的深度, fa[i,j]表示 i 的 2^j (即2的j次方) 倍祖先,那么fa[i , 0]即为节点i 的父亲, 然后就有一个递推式子:fa[i 阅读全文
摘要:
Luogu 3203 BZOJ 2002——弹飞绵羊 题意概括 给定一个序列,有N个装置,绵羊在不同 其实就是个裸LCT。 从i能跳到i+k即可以理解为i到i+k之间有一条连边 修改操作即断边然后连边。 在查询时只需要把要出发的点成为原树的根,然后访问n+1,把n+1splay到根,然后结果就在n+ 阅读全文
摘要:
BZOJ 1468——tree 点分治思想,处理一些树上路径问题中的高效算法。 重心——作用是可以优化时间复杂度,使递归的层数最少。 重心就是以某个点为根且这个点的子树最大值是最小的。 找重心的基本思路: dfs求得每一个点的最大子树Maxsize,用数组记录下来, 判断这个值是否比当前根的Maxs 阅读全文