随笔分类 - 8.————模板————
摘要:注意:以下所有说明均以帮助理解模板为目的,不保证正确性。 一些坑点:fft的范围,数组是否清空,模x的多少次方(同一个式子里一定要都是模同一个$x^n$意义下的多项式) 多项式求逆 已知$A(x)$,求满足$A(x)B(x)=1\ (mod\ x^n)$的B(以下为了方便假设n是2的幂) 考虑倍增,
阅读全文
摘要:注意:以下所有说明均以帮助理解模板为目的,不保证正确性。 最大流 dinic 考虑每次找一条S到T的不满流的路径并进行增广,但需要解决转圈圈的问题 所以首先用bfs给你的网络分层,之后再按照层(每个点只能走到下一层的点)来dfs,尽可能地把流量都占满 当前弧优化:在一次dfs中,每个点已经被访问完的
阅读全文
摘要:Miller_Rabin 快速($O(slogn)$,s为尝试次数)地测试一个数是否是质数 首先有费马小定理$a^{p-1}=1\ (mod\ p)$当p为质数时成立,所以可以随机选择a来以这个式子作为一定的判断依据,但并不是所有合数都不满足这个式子,甚至存在合数对所有的a都不满足这个式子 然后有二
阅读全文
摘要:做法 考虑用射线(一个点和一个向量)表示它左侧的半平面 那么我们可以先按与x轴正半轴夹角(可用atan2(y,x)实现)排序,然后再用双端队列维护当前在交中的射线即可 之所以要用双端队列,是因为新插入一个半平面时队首和队尾都有可能被弹出,而且要注意的是,要先弹队尾再弹队首 在最后,还要再用队首的弹一
阅读全文
摘要:原理 给自动机上的每个点定义两种属性:[min,max]和right集合,这个点表示(长度在[min,max]的、所有出现位置的右端点的集合为right的子串) 然后可以证明,两个节点的right集合要么不相交,要么互相包含 于是,让right直接包含(某个点的right)的点作为它的父亲,可以得到
阅读全文
摘要:用途 平衡树(可实现区间翻转) 原理 和treap一样,中序遍历表示权值的顺序,并且每个点有一个随机的附加值,形成一个堆来保证复杂度 但是不旋转,所有操作通过split和merge实现 分为两种split:按权值和按排名 代码 luogu3369 普通平衡树
阅读全文
摘要:用途 可在log复杂度合并的堆 性质 每个节点有一个距离,具体定义我不知道 1.满足堆的性质 2.左子节点距离>=右子节点 3.节点距离=右子节点距离加1 实现 按照以上的性质实现merge(x,y),先选出x,y中比较大的那个(大根堆为例),再拿它的右儿子和另一个去merge,如果merge出来不
阅读全文
摘要:用途 求生成树个数 做法 定义度数矩阵A,A[i][i]为i号点的度数;邻接矩阵B,B[i][j]为点i到j的边数 对于无向图,用A-B,然后随意选一个i,去掉第i行和第i列,它的行列式就是生成树个数 对于有向图,外向树的个数就是把度数矩阵换成入度矩阵;内向树的个数就是换成出度矩阵;删掉的行列一定要
阅读全文
摘要:Miskcoo大佬的多项式全家桶传送门 rvalue大佬的FFT讲解传送门 用途 将多项式快速(nlogn)变成点值表达,或将点值表达快速变回系数表达(逆变换),(多数时候)来达到求卷积的目的 做法 (为了方便,用wn代表n次单位根的ωn) 考虑选取特殊点,并用分治缩小问题规模 首先在多项式高位补零
阅读全文
摘要:用途 快速($O(\frac{n^{3/4}}{logn})$)地计算一些函数f的前缀和,以及(作为中间结果的)只计算质数的前缀和 一般要求$f(p)$是积性函数,$f(p)$是多项式的形式,且$f(p^k)$可以快速计算 做法 首先考虑求出范围内的质数的取值的和 如果有$f(p)=\sum{a_i
阅读全文
摘要:用途 比线性更快($O(n^{\frac{2}{3}})$)地求某些积性函数的前缀和 前置知识:狄利克雷卷积 形如$h(n)=\sum\limits_{d|n}f(d)g(\frac{n}{d})$,则称$h(n)=f(x)*g(x)$ 如果f和g都是积性函数,则卷出的h也是积性函数 可以证明,狄利
阅读全文
摘要:前置技能:整除分块 计算形如$\sum\limits_{i=1}^{n}a_if(\lfloor\frac{n}{i}\rfloor)$的式子 可以发现$\lfloor\frac{n}{i}\rfloor$只有$O(\sqrt{n})$种取值,且相同的取值的i是连续的,所以可以$O(\sqrt{n}
阅读全文
摘要:中国剩余定理(crt) 求解同余方程组$\{x=a_i (\mod b_i)$,要求$b_i$互质 有公式$x = \sum{a_iM_it_i} , lcm是b的最小公倍数, M_i=lcm/b_i , t_i=M_i^{-1}(\mod b_i)$ 因为感觉被excrt完爆所以看看得了233 扩
阅读全文
摘要:最大公因数(欧几里得算法) $gcd(a,b)=gcd(b\%a,a)$(不一定需要a<b) $gcd(0,b)=b$ 扩展欧几里得 寻找$ax+by=gcd(a,b)$的一组解x,y(一定存在整数解) $ax+by=gcd(a,b)=gcd(b\%a,a)=(b-\lfloor\frac{b}{a
阅读全文
摘要:用途 处理关于子集的异或和的问题,比如子集异或和的最大值,或者能不能异或出某个数 原理 从一堆数中处理出一组线性无关(?)的数,使得这些数能异或出的数和原来能异或出的数相同 线性基中,以每个位置为最高位1的数(最多)只有一个,这样就保证了线性无关 做法 依次处理每个数,对于x,从大到小扫描它的每一位
阅读全文
摘要:用途 $O(n)$处理出n以内所有素数 原理 使用 合数=最大因数(除1和本身外)*最小质因数 的原理来筛,每个数只会被筛一次 对于每个数i,令它是某数的最大因数,然后从小到大地找<=i的素数j,则i*j是合数 直到找到某个j使得$i\%j==0$,因为再往后的话,j'> i的某个因子,我们能交换j
阅读全文
摘要:莫队 如果知道[l,r]的答案时能快速求出[l+1,r][l,r+1][l-1,r][l,r-1]的答案,那么可以用莫队离线求解 如果要从[l,r]得到[l',r'],那么需要$O(|r'-r|+|l'-l|)$次更新答案 所以需要确定一个求答案的顺序使得这玩意最优 以$\frac{n}{q}$分块
阅读全文
摘要:用途 对于某些树形dp(目前只会树上最大权独立集或者类似的),动态地修改点权,并询问修改后的dp值 做法(树剖版) 以最大权独立集为例 设$f[x][0/1]$表示x选不选,这棵子树的最大权独立集大小 那么有(设y是x的孩子) $$f[x][0]=\sum{max\{f[y][0],f[y][1]\
阅读全文
摘要:用途 求回文子串 做法 先考虑回文子串以某字符为中心的情况,即长度为奇数 推着做,记rad[i]为以i位置为中心的最大半径(包含中点) 考虑怎么求rad[i]。找之前的一个右端点最靠右的位置p,设它的中心是j 如果有i<p,那么找到i关于j的对称点2*j-i,那么一定$rad[i]>=min\{ra
阅读全文
摘要:少女填坑中... 欧拉路径/欧拉回路 欧拉路径是一条经过图中所有边且只经过一次的路径(类似于一笔画问题);欧拉回路的话就是起点和终点相同的欧拉路径 存在条件 考虑有向图时欧拉回路存在的条件:由于每条边都要经过,所以每个点的入度和出度都要相等 然后再考虑欧拉路径:可以假装有一条从终点到起点的边,加上这
阅读全文

浙公网安备 33010602011771号