模板库
文章平均质量分 50
Jacky35
这个作者很懒,什么都没留下…
展开
-
[NOI2008]志愿者招募 [Zjoi2013]防守战线 一种网络流套路
文章目录Description志愿者招募防守战线AnalyzeCodeDescription志愿者招募申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管。布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者。经过估算,这个项目需要N 天才能完成,其中第i 天至少需要Ai 个人。布布通过了解得知,一共有M 类志愿者可以招募。其中第i 类可以从第Si 天工作到...原创 2019-04-03 22:32:27 · 339 阅读 · 0 评论 -
一种并查集操作
现在有以下这个问题:给定l,r,y对于x∈[l,r],我们需要将x和x+y并到一起。【GDOI2019Day2模拟2019.4.29】Endless原创 2019-04-29 22:22:03 · 290 阅读 · 0 评论 -
Tarjan模板 人工栈版Tarjan
Tarjan模板人工栈Tarjan引入tarjan算法有两个最重要东西 dfn[x]表示x的dfs序 low[x]表示x以及x能连到的点中(包括间接连到的)最小的dfn 还有两个标记 一个表示是否访问过 一个为是否在当前的栈中求解low何时能更新呢 设当前点为v,子节点为u原创 2016-08-12 14:38:12 · 986 阅读 · 0 评论 -
Link Cut Tree学习小记
LCTLCT几个月前就学了,花了我一整天问Alan_cty才搞会LCT的左右就是维护树上的一些值,和树链剖分有相同的作用,也有超过树链剖分的作用 LCT也就是动态树,意思就是树是会动的,也就是有连边和删边两个操作和链剖一样,边可以分为两种,重边(偏爱边)和轻边。一条重边连起来的是一条链,在同一棵splay中(也就是说有好多棵splay) 这样就会有两种树,我称之为原树和splay splay中原创 2017-05-20 16:05:48 · 352 阅读 · 0 评论 -
树链剖分模板+讲解
树链剖分的详解这里写得很好。我的标程与它的做法一样。 树链剖分的作用相当于在树上做线段树。 模板题 【ZJOI2008】树的统计 在一颗树上,区间查询,单点修改。 I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和原创 2016-05-06 17:13:27 · 1035 阅读 · 0 评论 -
并查集讲解(按秩合并与路径压缩),模板与典型例题
并查集模板并查集典型题目按秩合并,路径压缩讲解原创 2016-04-22 18:58:37 · 6802 阅读 · 7 评论 -
树状数组一(二)维区间修改与求和
首先考虑树状数组的一维区间修改与求和 把数列差分,那么对l和r的区间加就可以变成l位置的加和r+1的减 设差分数组为t 修改前数组为a 修改后数组为b 那么修改后的答案 ans=∑i=lrb[l]=∑i=lra[i]+b[i]∗(r−i+1)=(r+1)∑i=lra[i]+b[i]−∑i=lra[i]∗ians=\sum_{i=l}^rb[l]=\sum_{i=l}^ra[i]+b[i]原创 2017-08-16 16:20:05 · 693 阅读 · 0 评论 -
Dynamic len 题解+代码 (带修改莫队算法模板)
Description有n个数编号从0→n-1,两种操作: Q L R:询问编号为L→R-1的数中共有多少种不同的数 M X Y:将编号为X的数改为Y 共有m个操作Input第一行两个数n,m 接下来m行,每行有两种形式,如题目描述Output对于每一个Q操作,输出相应的答案Sample Input7 4 1 2 1 3 2 1 4 Q 1 6 M 3 2 Q 1 6 Q 3 5S原创 2020-02-22 14:50:15 · 1600 阅读 · 0 评论 -
ZKW,SPFA费用流模板
费用流比较常用的做法有两种:SPFA费用流和ZKW费用流两种费用流的基本做法相同:找到费用最小的路,不断增广到不能增广为止 正确性很显然,因为每次都找费用最小的路,所以费用一定最小,因为增广到不能增广才停止,所以一定是最大流SPFA费用流打起来和理解起来很简单,就是通过SPFA找到费用最小的路,并把这条路上的每条边的流量都减去这整条路的流量最小值,不断循环直到找不到增广路位置 缺点也很显然:在稠原创 2017-07-02 21:42:06 · 537 阅读 · 0 评论 -
LCT模板
int t[N][2],fa[N],rev[N],p[N],c1[N],d[N];void down(int x){ if(rev[x]==0) return; swap(t[x][0],t[x][1]); rev[t[x][0]]^=1;rev[t[x][1]]^=1; rev[x]=0;}bool lr(int x){return x==t[fa[x]][原创 2017-01-06 20:16:25 · 342 阅读 · 0 评论 -
FFT(快速傅里叶变换)NTT(快速数论变换)模板
FFT模板题:51nod 1028大数乘法#include#include#include#include#define fo(i,a,b) for(int i=a;i#define db double#define N 401000using namespace std;struct node{ db x,y; node friend operator +原创 2018-01-12 20:59:41 · 613 阅读 · 0 评论 -
KD-tree模板
作为一个骗分神器,kdtree可以解决许多计算几何或者二维数点(代替二维数据结构)的问题 模板题:每个点(x,y,z)坐标(x,y),权值(z) 每个询问A,B,C,求满足Ax+ByCAx+By的权值和#include#include#include#define fo(i,a,b) for(int i=a;i#define N 501000#define ll long lon原创 2018-01-19 22:34:10 · 551 阅读 · 0 评论 -
多项式 求逆/除法/取模/开根/ln/exp/求幂 (待添加多点求值)
模板直接到最底下多项式求逆给定A(x)A(x)A(x)求B(x)=A−1(x)(modxn)B(x)=A^{-1}(x)(mod x^n)B(x)=A−1(x)(modxn)使用倍增构造。若n=1,则直接求0次项的乘法逆元。若n>1设B(x)B(x)B(x)满足A(x)B(x)≡1mod  xn/2A(x)B(x)原创 2018-12-29 22:43:39 · 422 阅读 · 0 评论 -
BSGS(大步小步) 算法 学习小记
问题以下方程xy≡z(modp) x^y \equiv z\pmod{p} xy≡z(modp)已知xxx,zzz求yyy解法根据费马小定理有aϕ(p)≡1(modm)a^{\phi(p)} \equiv 1\pmod{m}aϕ(p)≡1(modm)所以答案上界是ϕ(p)\phi(p)ϕ(p)令m=ϕ(p)m=\sqrt {\phi(p)}m=ϕ(p)那么假设y=am+by=a...原创 2018-10-11 22:04:34 · 366 阅读 · 0 评论 -
自然数幂和 拉格朗日插值法和第二类斯特林数法
求s(n)=∑i=1nik求s(n)=∑i=1nik求s(n)=\sum_{i=1}^n i^k拉格朗日插值法第二类斯特林数法原创 2018-09-08 21:45:55 · 598 阅读 · 0 评论 -
三维偏序问题【NOI2018模拟3.28】Subset
三维偏序问题请看下面DescriptionInput第一行一个正整数 n 第二行 n 个数字,表示排列 a i 第三行 n 个数字,表示排列 b i 第四行 n 个数字,表示排列 c iOutput一行一个整数,表示答案Sample Input8 1 7 5 3 4 8 2 6 3 1 2 7 4 8 5 6 6 3 4 5 8 2 1 7Sample Output42Data Cons原创 2018-03-28 22:17:09 · 499 阅读 · 0 评论 -
李超线段树(标记永久化) 线段树维护线段 讲解 模板题
考虑下面一个问题: 定义一个坐标系,有m次操作 操作1:添加一条直线 操作2:求x=x0这条直线和其他直线的交点的最高纵坐标 时间复杂度log级别考虑线段树:线段树一个点代表一个区间,同时只代表一条线段 每次修改时,到达线段树的某个点,设这个点的区间为[l,r] 如果在l位置和r位置,新加入的边都比原有边大,那么直接用新加入的边替代整个区间,反之亦然。 否则,找出两条线交点在哪里,递归原创 2018-04-01 22:00:29 · 1314 阅读 · 0 评论 -
pollard pho&miller rabin模板
大数分解质因数和快速判断质数 结果在p里面#define ll long long#define fo(i,a,b) for(int i=a;i<=b;i++)ll mul(ll a,ll b,ll mo){ ll jy=0; for(;b;b/=2,a=(a+a)%mo) if(b%2==1) jy=(jy+a)%mo; return jy;}ll m原创 2018-01-18 15:29:48 · 302 阅读 · 0 评论 -
SAM(后缀自动机)模板
个人感觉这个SAM比SA要难理解的多,两者好像功能有相似之处,不过SAM在一些题目上有它的优势 把板子和模板题记录下来,方便以后抄标学习小记模板题:【GDOI2012】字符串Descriptionmmm正在学习字典序。现在老师给她布置了一个作业:给出一个字符串,问该字符串的所有不同的子串中,按字典序排第K的字串。由于众所周知的原因,mmm需要你为她解决这个问题。原创 2017-12-27 21:32:12 · 453 阅读 · 0 评论 -
SAM(后缀自动机)学习小计
前言其实我理解的不是很深刻,有大佬发现错误的请指教自动机什么是自动机? 有限状态自动机:能够识别一个字符串 后缀自动机? 能识别一个串的所有后缀(其实可以识别所有子串)瞎扯和分析首先,一个状态ST()表示一个字符串。 设要分析的字符串为S,suf为后缀集合 对于属于串S的每一个子串s1,s1需要开一个状态,因为后面加上一些字符后可能成为后缀 先假设对于每个子串s1,原创 2018-01-09 11:40:04 · 506 阅读 · 0 评论 -
KMP,EXKMP 扩展KMP
EXKMP是KMP算法的一个扩展和加难,可以解决一些KMP无法解决的问题 先回顾一下KMPKMPKMP的关键是next数组 next[i]表示的是s[1~next[i]]=s[i-next[i]+1~i] 在进行字符串匹配时如将s和t匹配时 如果t[i+1]和s[j+1]不对时,可以将t[i+1]和s[next[j]+1]进行匹配,因为next数组满足上面的性质,可以保证s[1...原创 2017-02-24 20:42:44 · 1372 阅读 · 0 评论 -
KMP模板
kmp用来快速求一个字符串的给定字串的数量。可以说是pascal的pos(),十分高效 详细解释点这里 求nextfor i:=2 to m do begin while (j>0)and(s[i]<>s[j+1]) do j:=next[j]; if s[i]=s[j+1] then inc(j); next[i]:=j; end原创 2016-05-14 17:11:56 · 426 阅读 · 0 评论 -
【CQOI2015】任务查询系统 主席树模板题
【CQOI2015】任务查询系统主席树,可持久化线段树Solution由于优先级比较大,需要离散化 如果不强制在线,只需将询问按时间排序维护一个权值线段树即可 维护时枚举时刻,在一原创 2017-02-14 12:53:24 · 362 阅读 · 0 评论 -
可持久化线段树
线段树想必大家都知道,是一种十分有用的数据结构。请看一道例题 题目:一堆数,有两种操作,1.将x这个位置改成y 2.查询x~y之间的最大值很简单的一道题,现在将题目改变一下,变成 题目:一堆数,有两种操作,1.将x这个位置改成y 2.查询第T时刻x~y之间的最大值那么有了T时刻后怎么做? 用可持久化线段树!(主席树) 很容易想到对于每个时刻开个线段树,不过不仅耗空间,而且耗时间。原创 2016-05-18 20:54:03 · 3141 阅读 · 2 评论 -
网络流GAP dinic模板
dinic GAP草地排水最大获利模板原创 2016-04-22 20:54:29 · 444 阅读 · 0 评论 -
最短路spfa dijkstra模板
spfa模板dijkstra模板原创 2016-04-22 20:47:24 · 363 阅读 · 0 评论 -
堆模板
堆模板原创 2016-04-22 20:41:11 · 498 阅读 · 0 评论 -
SA后缀数组模板 文件修复
后缀数组记数排序SA rank height ssort(){ memset(a,0,sizeof(a)); int mx=0;fo(i,1,n) a[x[y[i]]]++,mx=max(mx,x[y[i]]); fo(i,1,mx) a[i]+=a[i-1]; for(int i=n;i>0;i--) sa[a[x[y[i]]]]=y[i],a[x[y[i]]]--;原创 2016-05-14 08:20:20 · 613 阅读 · 0 评论 -
点分治模板 (树中点对距离)
点分治就是在一棵树中,将每个点分治…… 基本概念: 点分治:将一棵无根树变成有根树,再分别处理每棵有根子树。 重心:在一棵树中,这个点的最大子树是所有点中最小的。也可以说是删除该点时,树内剩下的子树最大节点数最小。 如何求重心??求出size,什么是定义,就怎么求。一般来说总(不是每次)时间复杂度为O(n) 找重心的代码树中点对距离原创 2016-05-11 20:46:04 · 1450 阅读 · 0 评论 -
最小生成树prim+kruskal模板
最小生成树模板prim+kruskal原创 2016-05-13 18:51:24 · 461 阅读 · 0 评论 -
匈牙利算法模板及解释
模板题:usaco The Perfect Stall完美的牛栏 每只牛有几个它喜欢的牛栏,求最多能使多少头牛到它喜欢的牛栏里(一个牛栏只能有一只牛在里面) 假设有4只牛,4个牛栏。 牛1喜欢1、2 牛2喜欢2、3 牛3喜欢2 牛4喜欢1、4 开始匹配! 从牛1开始。牛1发现1没牛,就进了1。到牛2,牛2发现2每牛,就进了。到牛3,牛3发现2居然被占了,就把牛2赶出来,牛2发现3没原创 2016-05-11 21:00:11 · 699 阅读 · 0 评论 -
不带修改主席树模板
K小(大)数查询对于一部分线段树看似无法直接做的题,可以用主席树来做。 主席树就是对每个前缀开一棵线段树,当然,直接这样会MLE。 可以使用一种类似动态开节点的方法可以有效避免MLE。 具体可以参考我的博客,那里写的更详细一点:可持久化线段树 因为主席树是由前缀加起来的,所以区间[l,r]的解可以类似前缀和那样a[r]-a[l-1]直接减主席树的详细解答建原创 2016-07-14 16:23:04 · 612 阅读 · 0 评论 -
K小数查询 分块模板
题目大意有n个数,两种操作 1:将x~y的数增加z 2:求x~y中的第k小数 输入第一个数为1就是操作1,2就是操作2,后面依次是x,y,z(k)Sample Input4 2 1 1 3 3 2 2 4 2 1 1 3 3 2 1 4 3Sample Output1 4题解对于分块的题,应该是要像建树那样建块的,包括确定每个块的范围和大小。大小一般为n√\sqrt{n},当然,也原创 2016-07-04 19:12:49 · 682 阅读 · 0 评论 -
状压DP
最近做了几道状压DP的题,在此汇总 状压DP就是使用二进制压缩状态进行动态规划T1最佳挑水Description 小Y喜欢挑水,小Y的家里有n(n是偶数)只桶,设小Y挑得是i,j两只桶,则挑水一趟需要走time[i,j]分钟。小Y想要在最少的时间内用自己的力量把家里所有的空桶装满。 小Y觉得这是个难题,于是来找你帮忙编写一个程序来找出一种最佳挑水方案。 Input 输入文件中的的第原创 2016-01-24 21:49:14 · 732 阅读 · 0 评论 -
简单splay模板
splay(x,y)表示将点x旋转到y的下面 fa[x]表示点x的父亲 t[x][0/1]表示点x的左/右儿子 updata用来维护需要维护的东西单点修改bool lr(int x){return x==t[fa[x]][1];}void rotate(int x){ int k=lr(x),y=fa[x]; t[y][k]=t[x][1-k]; if(t[x][1原创 2016-09-22 12:45:25 · 550 阅读 · 0 评论 -
高斯消元模板
高斯消元就是把一个N元N次方程组用O(N3)O(N^3)的方法解出来 本质上是用加减消元法,使得方程的元数变少,到最后变为一元一次方程,再回代得出所有元的解非递归模板答案最后在b数组里,原来的方程组储存在a和b数组里void jh(int i,int j){ fo(k,1,n) swap(a[i][k],a[j][k]);}void gaosi(){ fo(k,1,n-1)原创 2016-12-21 12:47:17 · 395 阅读 · 0 评论 -
AC自动机 模板与简单讲解 模板题:贴瓷砖
模板题:贴瓷砖AC自动机是什么呢 首先要知道KMP,KMP是单字符串匹配 接下来要知道字典树,是用来存一堆字符串 AC自动机就是它们合起来:多字符串匹配用一个网上很多人举的例子 模板题:贴瓷砖原创 2016-08-11 19:58:15 · 859 阅读 · 0 评论 -
莫比乌斯反演 bzoj 2301: [HAOI2011]Problem b模板
莫比乌斯反演 bzoj 2301: [HAOI2011]Problem b模板求μ\mumu[1]=1; fo(i,2,N) { if (bz[i]==0) p[++p[0]]=i,mu[i]=-1; fo(j,1,p[0])原创 2016-06-23 21:58:44 · 386 阅读 · 0 评论 -
【2010集训队出题】小Z的袜子 莫队算法 模板
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬。 你的任务便是告诉小原创 2016-07-08 22:00:47 · 581 阅读 · 0 评论 -
倍增LCA 模板
基本思想是用类似rmq的算法 f[i,j]表示点i向上跳2j2^j步后的点 预处理f fa[i]为i的父亲 fo(i,1,n) f[i][0]=fa[i]; fo(j,1,16) fo(i,1,n) f[i][j]=f[f[i][j-1]][j-1]; 求lcaint lca(int x,int y){ fd(i,16,0) if(deep[f[x][i]]>原创 2016-07-08 15:46:55 · 444 阅读 · 0 评论