
算法
myjs999
审核未通过
展开
-
树上方法总结 LCA 树上倍增 树链剖分 树的直径 重心
树是一种非常有条理的数据结构,从很多方面来看都是这样。每一个节点有其唯一确定的父亲节点,也有唯一确定的边权或点权。因为没有环,树上可以方便地dfs。并且很多链上的做法都可以推广到树上。 树上常用或不常用的有这些方法: - 倍增 - 树链剖分 - dfs找唯一路径 - 树形dp - 树上背包 - 树上期望dp - 各种图转树倍增其实非常好写。 预处理每个节点的2j2^j级原创 2017-11-06 21:31:32 · 1261 阅读 · 55 评论 -
多项式基础II 多项式求逆 多项式取模 多项式开方 多项式牛顿迭代 多项式ln 多项式exp
用牛顿迭代。原创 2018-12-05 22:14:36 · 557 阅读 · 0 评论 -
AC自动机基础应用
前言本篇博客既不含AC自动机定义和构建,也不含border理论。 与后缀自动机类似,AC自动机也是自动机+XX树来完成各种操作的。但AC自动机是为多主串而生的,相比之下,后缀自动机做多主串问题就麻烦得多。 AC自动机上的一个节点对应一个某串的前缀,因此AC自动机的大小是串长×字符集的。fail树在fail树上,一个节点的子树内的节点是以这个节点为后缀的所有前缀。…… 好!AC...原创 2018-08-04 10:26:04 · 1169 阅读 · 0 评论 -
后缀自动机基础应用
本博客讲解后缀自动机基础应用,而不说明定义、构建等内容。 构建代码如下:(跑得飞慢)struct node { node* ch[26], *f; int len, siz; // siz即Right集合大小};node* _nd = (node*)malloc(SIZE_OF_SAM); int noden;node* root, *last;inline no...原创 2018-07-26 18:32:45 · 737 阅读 · 3 评论 -
化实为虚——点分树 (动态点分治)
有时做题会想到一些与树深有关的做法,随机数据下是可以过的,但深度稍大就无法过。树深做法的问题在于与深度线性相关。给定的一棵树,其深度是不定的。但使用点分树,可以把原树对应到一颗深度为严格lognlognlog_n的树上。 建立点分树时,每次选取当前块中的重心,我们把子块的重心作为自己重心的儿子,就形成一颗点分树。可以证明其深度不超过lognlognlog_n。 这样,一些严重依赖树形态的算法,...原创 2018-04-30 20:49:45 · 3623 阅读 · 0 评论 -
下标序列与斜率优化
下标序列是我定义的一个东西。对于dp方程f[i]=min(f[j]+cost(i,j)),l[i]≤j≤r[i]f[i] = \min(f[j] + cost(i,j)),l[i]\le j\le r[i] 我们维护一个序列保存所有可以从那里转移来的位置。比如枚举到ii时,序列里存的就是l[i]l[i]到r[i]r[i]的所有数。那么我们最终的决策点kk一定是从这个序列里面选的。这个就叫下标序列。原创 2017-12-12 20:54:37 · 442 阅读 · 0 评论 -
$n\log_3n$预处理的 Sparse Table ST表
nlognnlogn预处理的Sparse Table大家都会写吧? 稍微把它改一点,就可以变成nlog3nnlog3n预处理的。 当然常数可能大一点,这个我没有详细计算。int pow3(int x) { if(x == 0) return 1; if(x == 1) return 3; int tmp = pow3(x/2); return tmp*tmp*(原创 2017-10-17 17:10:52 · 362 阅读 · 0 评论