随笔分类 - 8.————模板————
摘要:用途 树上多次询问,每次询问关于一些关键点,关键点总个数给定限制;单拿出来每个询问,基本上树形dp可以解决 思路 把每次询问的点和询问的点的lca(即关键点)浓缩到虚树上,两点之间的连边包含原树中两点间路径的信息,再在虚树上暴力(?)处理 做法 先yy一个在原树上对于单一询问的做法,然后把它放到虚树
阅读全文
摘要:原理 定义rank[i]表示suffix[i]在所有后缀中的字典序排名;sa[i]表示字典序排名为i的后缀是suffix[sa[i]] 定义height[i]表示排名为i的后缀和排名为i-1的后缀的LCP(最长公共前缀) 可以证明,$height[rank[i]]>=height[rank[i-1]
阅读全文
摘要:用途 大规模地处理树上路径 做法 先考虑对x为根的子树做dfs来处理x子树到x的路径,然后统计答案,然后再递归地做x的儿子... 然而当树退化成链时,最差复杂度是$O(n^2)$的 类比一维中二分的做法,其实是使左右区间尽量平均,那我们也让我们要处理的点的子树大小尽量平均 具体来说,我们每次想要做x
阅读全文
摘要:(坑) 网络流模型整理-http://www.cnblogs.com/LadyLex/p/7601119.html
阅读全文
摘要:做法以后再补,先写一些注意事项。 做法以后也不补了,直接看这个吧。https://www.cnblogs.com/candy99/p/6271344.html 1.rotate其实是最容易写错的地方(对于丝毫没有掌握splay蒟蒻我来说),一定要仔细检查 2.splay之前需要先从根开始往下push
阅读全文
摘要:背景 有A[i]和B[i],求一个最优的选择,使$\frac{\sum{A[i]}}{\sum{B[i]}}$最大(最小同理)。 做法 设某一个可能的答案为r,那么经过变形,会有$\sum{A[i]-B[i]*r}$,当r是最优解时=0,r偏小时>0,r偏大时<0。 然后就可以二分这个r来做了。 例
阅读全文
摘要:先膜黑科技讲义 - Magolor orz 基础 设lowbit(x)表示的是把x的二进制只留下最低一位的1,然后lowbit(x)=x&(-x) (我也不知道为什么) 设c[x]表示从i往前一共lowbit(x)个数的和,那么x-lowbit(x)就是c[x]表示的范围的前一个数。 然后可以得到c
阅读全文
摘要:设: sw[i]为1..i的w之和 sd[i]为1到i的距离 cost[i]为把第一个锯木厂建在i带来的花费 all[i,j]为把i..j所有木头运到j所需要的花费 所以$all[i,j]=cost[j]-cost[i-1]-sw[i-1]*(sd[j]-sd[i-1])$ 我们设第2个锯木厂建在i
阅读全文
摘要:题意:给n堆石子,每次合并相邻两堆,花费是这两堆的石子个数之和(1和n相邻),求全部合并,最小总花费 若不要求相邻,可以贪心地合并最小的两堆。然而要求相邻就有反例 为了方便,我们可以把n个数再复制一遍,放到第n个数后,就不用考虑环的问题了 我们设f[i][j]为合并区间[i,j]所需要的最小花费,然
阅读全文
摘要:用途 我想把一个本来是线性的东西放到树上做,维护路径或者是子树的各种性质,那就用树剖呗 它可以套线段树、树状数组、ST表(以及其他我不知道的) 做法 我们考虑把树分成一条条链,然后对每条链维护我们的数据结构(线段树等)。对于两点间路径的询问,只要把路径拆成好几条链统计答案就可以了 然后为了保证链数是
阅读全文

浙公网安备 33010602011771号