
知识整理
文章平均质量分 66
DYT_B
略过
展开
-
树链剖分:P3384 【模板】树链剖分
题目描述:戳这里 题解: 其实树剖的重点就在于轻重链,这篇文章写的很好 然而我线段树写得全是问题,改了半天2333代码如下:#include<cstdio>#include<string>#include<cstring>using namespace std;const int maxn=100005;int n,m,root,tt,t...原创 2018-08-06 09:33:41 · 257 阅读 · 0 评论 -
最小费用最大流:Luogu P3381 【模板】最小费用最大流
题目描述:戳这里 题解: 最小费用最大流的套路基本上就是这样的: 1.求出当前残留网络之中s -&gt; t的最短路 (spfa) 因为有可能会有负权边 2.答案+= dis[t] × totflow 3.在处理完了之后修正途径边的流量(正减反加) 4.循环1 2 3,直到S到T不连通代码如下:#include&lt;cstdio&gt;#include&lt;stri...原创 2018-08-27 08:51:09 · 291 阅读 · 0 评论 -
凸包算法:Graham模板
感觉这个算法比衍生版的Andrew算法优秀。 算法过程大致如下: 首先找到一个y坐标最小的点(y坐标相等就x最小)作为基准点,进行极角排序。这样能保证所有点到这个点的角度都在(-180,180]之间,就不用像Andrew一样维护上下凸壳了。 然后只要维护一下凸壳就好了(如果发现是凹的就退栈)。 最后如果要算面积就分解为三角形来算。 代码如下:#include<cstdio>...原创 2018-09-01 10:19:37 · 352 阅读 · 0 评论 -
KM算法模板
代码如下:#include<cstdio>#include<string>#include<cstring>using namespace std;const int maxn=505;int n,m,n1,t,ans,lasl[maxn],lasr[maxn],g[maxn][maxn],tagl[maxn],tagr[maxn];bool...原创 2018-09-05 14:33:41 · 370 阅读 · 0 评论 -
CDQ分治模板:HDU5618 Jam's problem again
题目描述:戳这里题解:这是一道CDQ分治的模板。我们想要求三维的“正序对”的数量。那么可以通过牌序第一维,然后对后两位使用一些数据结构来维护。但是这样很难维护,而CDQ分治就是解决这样的问题的一个得力工具。CDQ的思想大概就和归并排序一样。我们先以x,y,z分别为第1,2,3关键字排序。考虑分治,对于一段区间,我们把它分成l ~ mid和mid+1 ~ r两段,使其分别按y排序。那么...原创 2018-11-18 19:44:02 · 352 阅读 · 0 评论 -
算法学习:快速傅里叶变换(FFT)
前置知识:1.多项式:形如:f(x)=∑0n−1ai⋅xif(x)=\sum_{0}^{n-1}ai\cdot x^if(x)=0∑n−1ai⋅xi多项式表示法:系数表示法:就是上式的写法点值表示法:在f(x)上取n个点,就能唯一确定的表示出这个多项式。证明如下:∀\forall∀n点集合c定义集合A={a0,a1,a2,...,an−1a_0,a_1,a_2,...,a_...原创 2018-12-03 20:57:40 · 1561 阅读 · 0 评论 -
主席树:LuoguP3834 【模板】可持久化线段树 1(主席树)
题目描述:戳这里 题解: 话说我去年好像学过主席树。。。 然后我就不会了,然后我就害怕的又学了一次。 主席树其实就是线段树的优化。 我们考虑这道模板题。 如果用暴力的方法做,肯定会Tle。 那么我们想一想能不能用线段树来优化一下。 先简单化一下题目,如果求的是1~m(m&lt;=n)的第k大值,怎么用线段树做? 那么我们就可以建立一颗权值(权值是点权离散化之后的位置)线段树,每一...原创 2018-08-05 16:52:31 · 255 阅读 · 0 评论 -
Manacher算法:Luogu P3805 【模板】manacher算法
题目描述:戳这里题解:: 以前听说过,但是没有学过manacher算法,现在发现其实还挺简单的。。。 manacher算法可以用来解决最长回文串的长度这一类的问题。 讲这个算法之前,我们首先要解决一个重要的问题:回文串分为奇数长度和偶数长度。 那么我们可以用一个巧妙(暴力)的方法,每两个字符之间加一个#(或者随便什么符号),这样不管是偶数长度还是奇数长度的回文字符串都会变成奇数长度的。...原创 2018-07-28 10:06:49 · 248 阅读 · 0 评论 -
排列组合初步
数学基础:公式大全: C0n+C1n+C2n...+Cnn=2nCn0+Cn1+Cn2...+Cnn=2nC_{n}^{0}+C_{n}^{1}+C_{n}^{2}...+C_{n}^{n}=2^{n} 1C1n+2C2n+3C3n...+nCnn=n2n−11Cn1+2Cn2+3Cn3...+nCnn=n2n−11C_{n}^{1}+2C_{n}^{2}+3C_{n}^{3}...+nC_{...原创 2018-07-26 16:21:45 · 804 阅读 · 0 评论 -
LCA模板
copy代码神器void dfs(int x){ for (int j=lnk[x];j;j=nxt[j]) if (!dep[son[j]]) { dep[son[j]]=dep[x]+1; f[son[j]][0]=x; fa[son[j]]=x; dfs(son[j]); }}void build(){ for (int j=1;j&l...原创 2018-03-15 19:28:32 · 199 阅读 · 0 评论 -
哈夫曼树的构造
定义:给定数列{ai} 哈夫曼数是一棵二叉树,满足数列中的所有的数都是它的叶节点,且每一个叶节点的权值*它到根的距离之和最短。构造方法:将原数列看成一个森林,每次挑出最小的两个节点合并,直到只剩下一个节点,就构造好了一颗哈夫曼树。 (证明略~)示例代码:#include<cstdio>#include<string>#include<...原创 2018-03-15 20:11:37 · 2031 阅读 · 0 评论 -
斜率优化总结
适用范围:斜率优化是DP的一种优化,适用于转移方程式中除了f[i]和f[j]还和其他和ij有关的变量的DP,例如:f[i]=min(f[j]+(a[i]-a[j])^2)(a数组递增)实现方法:以上面的方程为例。 step1:展开: 假设f[i]必定由f[j]转移而来,则 f[i]=f[j]+(a[i]-a[j])^2=f[j]+a[i]^2-2*a[i]*a[j]+a[j]^...原创 2018-03-02 20:52:48 · 1218 阅读 · 0 评论 -
网络流算法+例题整理
DINIC(无当前弧优化):void add(int x,int y,int z){ son[++tot]=y,w[tot]=z,nxt[tot]=lnk[x],lnk[x]=tot;}int dfs(int x,int sum){ if (x==T) return sum; for (int j=lnk[x];j!=-1;j=nxt[j]) if (...原创 2018-02-10 23:17:00 · 1180 阅读 · 0 评论 -
数论初步:辗转相除法和扩展欧几里得
1.辗转相除法虽然很久以前就知道这个方法了,但是一直都不明白原理【汗】 我们假设GCD(x,y)为x,y的最大公因数,那么有这样的一个结论: x&amp;amp;amp;amp;amp;amp;gt;=y时:GCD(x,y)=GCD(x%y,y)(如果x比y小则x%y还是等于x) 证明如下: 令x,y的最大公因数为n,则x|n,y|n,x%y &amp;amp;amp;amp;amp;amp;lt;=&amp;amp;amp;amp;amp;amp原创 2018-06-20 20:38:23 · 807 阅读 · 0 评论 -
数论初步:乘法逆元与几种求法
1.乘法逆元的定义及作用定义(口胡): 乘法逆元是取模运算中的一个东西。假设ax≡1 (mod p) 并且GCD(a,p)=1 (a,p互质),那么x就是a的逆元。对于给定的a和p,有且仅有一个数是它的逆元。乘法逆元的作用: 因为取模这个运算是不满足“除法分配率”的,这就导致了如果a,b或者p很大的话,(a/b) Mod p 这个运算就会爆精度。那么我们就要用另外一种方法来计算这个式子...原创 2018-06-21 16:01:00 · 1035 阅读 · 0 评论 -
数论初步:欧拉函数
1.欧拉函数的定义欧拉函数,又称为φ。φ(n)表示比n小的和n互质的数的个数。 举个栗子:φ(8)=4,因为1,3,5,7与8互质。2.欧拉函数的通式及证明欧拉函数有一个通式,即为:φ(n)=n∗(1−1/p1)∗(1−1/p2)∗……∗(1−1/pr) (p1…pr为n的所有质因子)。 证明: 首先:φ(a*b) = φ(a)*φ(b)(a,b互质时) ………………………………...原创 2018-06-23 14:58:27 · 857 阅读 · 0 评论 -
AC自动机模板:Luogu P3808 【模板】AC自动机(简单版)
题目描述:戳这里题解:这题是AC自动机的模板题。 AC自动机可以看作是Trie和kmp的结合体(我连kmp都不会写了。。。) 它可以看作是kmp的延伸。kmp求的是某一字符串在给定字符串中出现的次数,而AC自动机求的是某一些字符串在给定字符串中出现的次数之和或者这一类的问题。 AC自动机是用Trie来实现的,只是多了一个fail(指针)。 那么我们就重点来介绍fail的作用。 ...原创 2018-07-17 21:30:38 · 290 阅读 · 0 评论 -
AC自动机模板:P3796 【模板】AC自动机(加强版)
题目描述:戳这里 题解:AC自动机简单版的题解 这题相较于那一题只是改变了一下求的东西,我们只要稍加改动,就能AC。代码如下:#include<cstdio>#include<string>#include<cstring>using namespace std;const int maxn=10505,maxm=1e6+5;int n...原创 2018-07-18 07:59:16 · 372 阅读 · 0 评论 -
组合数学:第一类,第二类斯特林数
第一类斯特林数:我们考虑这样一个问题:有n个互不同的小球,拼成k个环,有几种拼法。数据量:n&amp;amp;amp;lt;=1000 这样的数据量,不难看出是一个n^2的DP或者说递推。 我们假设S(n,k)表示前n个小球,拼成k个环的方案数。 这样看似要知道每一个环中有几个小球,但是其实我们可以直接添加小球。 我们可以假设把小球加到某一个已经拼好的小球后面,那么这样就能枚举到每种情况。并且它是一个环,所以...原创 2018-07-13 21:04:25 · 1047 阅读 · 0 评论 -
总结:Lucas定理
证明并不会 公式: CyxC_{x}^{y} mod p=CymodpxmodpC_{x mod p }^{y mod p}*Lucasy/px/pLucas_{x/p}^{y/p}当然答案是要递归得出的。限制条件:1.因为求组合数是用暴力方法求的,所以p不能太大 2.组合数记得mod,用逆元来解决 3.要判断一些特殊情况,防止RE,如:Lucasy/px/pLucas_{x/p}^{y/p}中原创 2017-11-08 21:20:36 · 293 阅读 · 0 评论