
模板整理
文章平均质量分 65
proudzhao
这个作者很懒,什么都没留下…
展开
-
FFT例题
FFT,NTT,FFT优化,模版P3723 [AH2017/HNOI2017] 礼物ABC196 F. Substring 2CF528D Fuzzy SearchCF1709F Multiset of Strings原创 2022-10-03 16:53:54 · 459 阅读 · 0 评论 -
斜率优化dp例题
斜率优化 任务安排原创 2022-09-24 14:14:00 · 437 阅读 · 0 评论 -
[模版] spfa费用流
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <set>#include <map>#include <queue>#include <stack>#include <vector>#include <string>#include <algorith.原创 2021-11-30 21:24:48 · 265 阅读 · 0 评论 -
无向图的双连通分量
文章目录定义例题冗余路径电力矿场搭建定义在一张连通的无向图中,对于两个点u和v,如果无论删去哪条边(只能删去一条)都不能使得它们不连通,则称u和v边双连通。在一张连通的无向图中,对于两个点u和v,如果无论删去哪个点(只能删去一个,且不能删去u和v自己)都不能使得它们不连通,则称u和v点双连通。边双连通具有传递性,即若x,y边双连通,y,z边双连通,则x,z边双连通。点双连通不具有传递性。割点:对于一个无向图,如果把一个点删除后这个图的极大连通分量数增加了,那么这个点就是这个图的割点。割边:对于原创 2021-11-15 21:15:47 · 571 阅读 · 0 评论 -
树链剖分专题训练
题目链接[HAOI2015]树上操作数据范围:n,m<=100000n,m<=100000n,m<=100000树剖模版题。#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <set>#include <map>#include <queue>#include <stac原创 2021-10-27 15:07:25 · 184 阅读 · 0 评论 -
平衡树专题训练
题目链接普通平衡树平衡树模版,splaysplaysplay实现。#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <set>#include <map>#include <queue>#include <stack>#include <vector>#include原创 2021-10-27 13:23:19 · 167 阅读 · 0 评论 -
[模版]树套树
文章目录线段树套平衡树树套树-简单版树套树线段树套平衡树当需要维护指定区间内的前驱,后继,第 kkk大,某个数的排名,或者插入删除的时候,我们通常需要使用平衡树来满足我们的需求,即线段树套平衡树。树套树-简单版针对一些比较简单的操作,可以不用真的自己在手写一个平衡树,STLSTLSTL中的setsetset就完全够用了。#include <iostream>#include <cstdio>#include <cmath>#include <cst原创 2021-10-26 20:14:29 · 114 阅读 · 0 评论 -
[模版] 树链剖分
树链剖分是解决树上问题的一种常见数据结构,对于树上路径修改及路径信息查询等问题有着较优的复杂度。树链剖分分为两种:重链剖分和长链剖分,通常说的树链剖分指的是重链剖分。一些名词:重儿子:每个点的子树中,子树大小(即节点数)最大的子节点(如果有多个节点,任选一个)轻儿子:除重儿子外的其他子节点重边:每个节点与其重儿子间的边轻边:每个节点与其轻儿子间的边重链:重边连成的链轻链:轻边连成的链剖分后的树有一个性质:从根到某一点的路径上轻链、重链的个数都不大于lognlognlogn。树链剖分就是将树原创 2021-10-24 16:31:02 · 195 阅读 · 0 评论 -
后缀自动机专题练习
一、SAM的性质:SAMSAMSAM是个状态机。一个起点,若干终点。原串的所有子串和从SAMSAMSAM起点开始的所有路径一一对应,不重不漏。所以终点就是包含后缀的点。每个点包含若干子串,每个子串都一一对应一条从起点到该点的路径。且这些子串一定是里面最长子串的连续后缀。SAMSAMSAM问题中经常考虑两种边:(1)(1)(1) 普通边,类似于TrieTrieTrie。表示在某个状态所表示的所有子串的后面添加一个字符。(2)(2)(2) Link、FatherLink、FatherLink、Fath原创 2021-10-20 17:30:03 · 438 阅读 · 0 评论 -
学习笔记:最短路[模版总结]
最短路算法分为两大类:1、单源最短路,常用算法有:(1) dijkstra,只适用于正边权图。在稠密图上的时间复杂度是 O(n^2),稀疏图上的时间复杂度是 O(mlogn)。(2) spfa,不论边权是正的还是负的,都可以做。算法平均时间复杂度是 O(km),k是常数2、多源最短路,一般用floyd算法。时间复杂度是 O(n^3)。算法一:dijkstra算法模板题:给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走原创 2021-02-08 15:17:46 · 197 阅读 · 0 评论 -
学习笔记:哈希表
整数的哈希:之所以使用哈希,是因为x的范围非常大,单个数有限,所以可以用一个比较小的数字来代表它,和离散化有点像,但是离散化是有序的哈希(要求按顺序来,即相对的大小关系不能混淆,我原来比你大,哈希之后的值也要比你大)整数的哈希一般可以直接对一个数取模(模上的这个数一般取一个质数,可以减少冲突的可能,我也不知道为什么),将得到的值作为它的哈希值,但很有可能会出现冲突的情况(即a与b的哈希值相同),处理冲突的方法有两种:1、拉链法 2、开发寻址法————————————————————拉链法:对于映原创 2021-02-04 14:16:57 · 484 阅读 · 0 评论 -
学习笔记:拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。有向图的拓扑序列:给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。请输出任意一个该有向原创 2021-02-06 14:38:53 · 378 阅读 · 0 评论 -
学习笔记:逆元
如果 ax≡1 (mod p),那么,x就是a的逆元,相互的,a也是x的逆元。那么你逆元有什么用呢?首先我们需要知道,取余运算对除法是不适用的,a/b % p ≠ (a%p / b%p) %p,如果我们要计算若干个数相乘起来除以某个数时,并不能像乘法那样边乘边取余,所以我们可以将a/b%p转化为 ab-1%p (b-1是指b在模p下的逆元,不是b的-1次方),这样就可以边乘边取余逆元的求法:方法一:欧拉函数int power(int a,int b,int p){ int res=1%p;原创 2021-02-12 14:07:56 · 489 阅读 · 0 评论 -
学习笔记:扩展欧几里得
写法一:int exgcd(int a,int b,int &x,int &y){ if(b==0) { x=1; y=0; return a; } int g=exgcd(b,a%b,x,y); //参数正传 int x0=x,y0=y; x=y0; y=x0-a/b*y0; return g;}int main(){ int n; cin>>n; while(n--) { int a,b; a=read(); b=read();原创 2021-02-09 16:57:18 · 149 阅读 · 0 评论 -
学习笔记:组合数
不同情境下组合数的求法1、求组合数 I给定n组询问,每组询问给定两个整数a,b,请你输出C(a,b) mod (1e9+7)的值。输入格式第一行包含整数n。接下来n行,每行包含一组a和b。输出格式共n行,每行输出一个询问的解。数据范围1≤n≤10000, 1≤b≤a≤2000做法:有一万次询问,如果每次都算一遍,那么肯定会超时,再来看数据范围a和b都不大于2000,可以提前把所有的C(a,b)算出来,用数组存起来,这样每次询问的时候直接输出就好了const int N = 20.原创 2021-02-16 12:28:14 · 301 阅读 · 0 评论 -
学习笔记:最小生成树
算法一:Prim算法给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每行包含三个整数u,v,w,表示点u和点v之间原创 2021-02-08 16:58:18 · 145 阅读 · 0 评论 -
学习笔记:筛质数
1、埃氏筛const int N = 1e6+5;bool vis[N];int prime[N],cnt; //数组存质数void get_prime(int x) //获取1~x内的质数{ for(int i=2;i<=x;i++) { if(!vis[i]) //如果该数没有被筛掉,说明它是质数 { prime[cnt++]=i;//加入质数表 for(int j=i+i;j<=x;j+=i) vis[j]=1;//将它的所有倍数筛掉 } }}原创 2021-02-08 18:10:15 · 225 阅读 · 0 评论 -
学习笔记:欧拉函数
欧拉函数定义:单个欧拉函数求法:int euler(int x){ int res=x; for(int i=2;i<=x/i;i++) { if(x%i==0) { res=res/i*(i-1); while(x%i==0) x/=i; } } if(x>1) res=res/x*(x-1); return res;}int main(){ int n; cin>>n; while(n--) { int x; cin&原创 2021-02-09 15:42:35 · 335 阅读 · 0 评论 -
学习笔记:二分图
二分图又称作偶图(图中不含奇数环),是图论中的一种特殊模型。设 G=(V,E) 是一无向图,若顶点 V 可分割为两个互不相交的子集 (A,B),且图中的每条边(i,j)所关联的两个顶点 i 和 j 分属这两个不同的顶点集 (i ∈ A,j ∈ B),则称图 G 为一二分图。简单来说,就是顶点集 V 可分割为两个互不相交的子集,且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。当图中的顶点分为两个集合,使得第一个集合中的所有顶点都与第二个集合中的所有顶点相连时,此时是一特殊原创 2021-02-16 15:26:46 · 430 阅读 · 0 评论 -
Splay
请写一个程, 要求维护一个数列, 支持以下 6 种操作:1、插入:在当前数列的第 posi 个数字后插入 tot 个数字:c1, c2, …, ctot;若在数列首插 入,则 posi 为 02、删除:从当前数列的第 posi 个数字开始连续删除 tot 个数字3、修改:从当前数列的第 posi 个数字开始连续删除 tot 个数字4、翻转:取出从当前数列的第 posi 个数字开始的 tot 个数字,翻转后放入原来的位置5、求和:计算从当前数列的第 posi 个数字开始的 tot 个数字的原创 2021-09-18 16:35:00 · 132 阅读 · 0 评论 -
[模版]dinic算法
算法流程与EK算法类似,相当于对EK算法做了一些优化。EK算法每次只寻找一条增广路,dinic算法每次寻找多条增广路。时间复杂度:O(n2m)O(n^2m)O(n2m)然而实际运行效率是很快的,一般100001000010000~100000100000100000的问题规模都没问题。模版:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#inclu原创 2021-10-10 10:37:45 · 139 阅读 · 0 评论 -
[模版]EK算法
算法步骤:从源点开始,用BFS找一条最短的增广路径,计算该路径上的残量最小值,累加到最大流值;沿着该路径修改流量值,实际是修改是残量网络的边权;重复上述步骤,直到找不到增广路时,此时得到的流就是最大流。时间复杂度:O(nm2)O(nm^2)O(nm2),nnn是点数,mmm是边数。但实际情况中,EK算法的复杂度远低于理论上的复杂度,一般100010001000~100001000010000的规模EK算法都可以解决。模板题:Acwing2171.EK求最大流#include <i原创 2021-10-09 19:11:40 · 280 阅读 · 0 评论 -
高斯消元解线性方程组
高斯消元是一种求解线性方程组的方法,时间复杂度为O(n3)O(n^3)O(n3)。对于这样NNN个NNN元一次方程组:{a11x1+a12x2+...+a1nxn=b1a21x1+a22x2+...+a2nxn=b2............an1x1+an2x2+...+annxn=bn\begin{cases}a_{11}x_1+a_{12}x_2+...+a_{1n}x_n=b_1\\a_{21}x_1+a_{22}x_2+...+a_{2n}x_n=b_2\\............\\原创 2021-09-26 11:39:22 · 954 阅读 · 0 评论 -
中国剩余定理和扩展中国剩余定理代码模版
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <set>#include <map>#include <queue>#include <stack>#include <vector>#include <string>#include <algorithm原创 2021-09-22 22:27:20 · 161 阅读 · 0 评论 -
第K小数---可持久化线段树(静态)
#include<cstdio>#include<cmath>#include<ctime>#include<cstring>#include<iostream>#include<map>#include<set>#include<stack>#include<queue>#include<string>#include<vector>#define l.原创 2021-05-04 13:33:20 · 118 阅读 · 0 评论 -
希尔伯特曲线
1、由编号求坐标struct point {ll x, y;};point get(ll n, ll id){ if(n == 0) return {0, 0}; ll tot = 1ll << n * 2 - 2, len = 1ll << n - 1; point p = get(n - 1, id % tot); ll x = p.x, y = p.y; int area = id / tot; if(area == 0) return {y原创 2021-04-22 14:22:26 · 597 阅读 · 1 评论 -
spfa判断负环回路
经典例题:虫洞#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<map>#include<stack>#include<queue>#include<string>#include<vector>#include<algorithm>#define ll long l原创 2021-04-19 22:45:48 · 124 阅读 · 0 评论 -
最长回文子串——马拉车算法(manacher)
1、为了规避奇偶串的不同情况,对原串进行一下处理:原串 abcd —> #a#b#c#d#原串 1234 —> #1#2#3#4#即间隔插入分隔符 ‘#’ ;这样以来,所有的回文子串都变成的奇数长度。2、引入变量:p数组,mx, mid;设str是对原串处理后的新串。p[i]表示以str[i]为中心的最长回文子串的半径,不难推出原串的长度是p[i] - 1。mx是已经计算过的所有回文串能到达的最右端的边界,mid是该回文串的中心。接下来是求解p[i]的过程,(求p[i]时,p[原创 2021-05-01 19:28:41 · 342 阅读 · 0 评论 -
严格次小生成树
求解步骤:1、先求一遍最小生成树,并把所有边标记为树边与非树边。2、按最小生成树(即树边)建图。3、预处理F[x, k], d1[x, k], d2[x, k] F[x, k]:从点x向根走2^k步到达的节点 d1[x, k]:从点x向根走2^k步经过的所有边的最大值 d2[x, k]:从点x向根走2^k步经过的所有边的次大值4、枚举每一条非树边{a, b, c} 在树中从a到b的路径中找到最大边权与次大边权与该非树边交换#include<cstdio>#include&.原创 2021-04-26 21:01:39 · 136 阅读 · 0 评论 -
bfs之八数码
在一个 3×3 的网格中,1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3 的网格中。例如:1 2 3x 4 67 5 8在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):1 2 34 5 67 8 x例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下:1 2 3 1 2 3 1 2 3 1 2 3x 4 6 4原创 2021-03-21 20:43:39 · 268 阅读 · 1 评论 -
普通平衡树(模版)
#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<sstream>#include<map>#include<stack>#include<queue>#include<string>#include<vector>#include<algorithm>#.原创 2021-05-14 15:13:06 · 167 阅读 · 0 评论 -
AC自动机
前置技能:KMP和trie树。AC 自动机是一种用于解决多模式串以及一主串匹配的字符串算法。问题通常是给出若干个模式串 S 以及主串 T,询问若干个模式串分别在主串中的某些信息。AC 自动机构建在 Trie 的结构基础上,结合了 KMP 算法的失配指针思想。P3808 【模板】AC自动机(简单版)题目描述给定 n 个模式串 Si 和一个文本串 T,求有多少个不同的模式串在文本串里出现过。两个模式串不同当且仅当他们编号不同。输入格式第一行是一个整数,表示模式串的个数 n。第 2 到第 (原创 2021-09-18 16:09:28 · 153 阅读 · 0 评论 -
c++矩阵模板
给出一个N * N的矩阵,其中的元素均为正整数。求这个矩阵的M次方。由于M次方的计算结果太大,只需要输出每个元素Mod (10^9 + 7)的结果。#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<sstream>#include<unordered_map>#include<stack>#include<原创 2021-04-07 22:59:29 · 256 阅读 · 0 评论 -
最近公共祖先(LCA)
求法一:树上倍增法设F[x, k]表示x的2k辈的祖先,即从x先根节点走2k步到达的节点。特别的,日狗该节点不存在(即超出了根节点),则另F[x, k] = 0.F[x, 0]就是x的父节点。除此之外,对于任意的和合法k,都有F[x, k] = F[ F[x, k-1], k - 1]。这是类似于一个动态规划的过程,“阶段”就是节点的深度。因此,我们可以对树进行广度优先遍历,按照层次顺序,在节点入队之前,计算它在F数组中的相应的值。以上部分是预处理,时间复杂度为O(nlogn),之后可以多次对不同的原创 2021-04-25 17:38:30 · 130 阅读 · 0 评论 -
学习笔记:高精度[模版] (vecor实现)
#include<cstdio>#include<cmath>#include<ctime>#include<cstring>#include<iostream>#include<map>#include<stack>#include<queue>#include<string>#include<vector>#define ll long long#define u原创 2021-01-28 21:28:42 · 159 阅读 · 0 评论