![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
板子
Zaller
acm退休,考研ing...
无偿给同校学弟学妹们解答;
博客若有看不懂的或者不对的地方,直接私信我就行(如果我回复晚了,对不起都是我的错);
不用太客气等我回复,有问题直接私信发:)
ps: 随缘上线
展开
-
【模板】哈希hash
板子1struct HASH { typedef unsigned long long ull; static const int _N = 1e5 + 10; const ull base = 131; ull p[_N], f[_N]; int lenS; // 传进来的字符串 下标从1开始 // 同时 传进来字符串的长度 void init(const string &s,const int _lenS) {原创 2020-12-07 10:11:21 · 189 阅读 · 0 评论 -
【模板】kd树
题解浅谈偏序问题与K-D Tree题目P1429 平面最近点对(加强版)板子#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int n, m, k;namespace K_D_Tree { typedef double dbl; const int D = 2;// 空间维度 int f = 0;//当前遍历到的维度 在kd树建树时相邻层的判断大小的维度是不一样原创 2020-10-27 21:50:01 · 362 阅读 · 0 评论 -
【模板】树哈希
OI Wiki - 树哈希板子#include <bits/stdc++.h>using namespace std;typedef unsigned long long ull;typedef long long ll;const int INF = 0x3f3f3f3f;const ll inf = (1ll << 60);const int N = 1e6 + 10;vector<int> e[N];int n, m;namespace原创 2020-10-08 19:43:02 · 318 阅读 · 1 评论 -
P3690 【模板】Link Cut Tree (动态树lct)
学习资源https://www.cnblogs.com/flashhu/p/8324551.html中序遍历Splay得到的每个点的深度序列严格递增题目P3690 【模板】Link Cut Tree (动态树)数组版代码#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int n, m, k;namespace LCT { // lct板子 int v[N];// 点权原创 2020-09-19 21:12:57 · 161 阅读 · 0 评论 -
P3690 【模板】Link Cut Tree (动态树)
学习博客https://www.cnblogs.com/flashhu/p/8324551.html题目代码#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int n, m, k;namespace LCT { // lct板子 int v[N];// 点权 int f[N];// 父节点 int st[N];//栈 int c[N][2];// 每个原创 2020-09-15 15:39:08 · 134 阅读 · 0 评论 -
【模板】P2590 [ZJOI2008]树的统计 · 树链剖分+线段树
题解简单题,贴板子就行注意负数!!#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF=0x3f3f3f3f;const int N=2e5+10;int n,m,k;namespace chain{//树链剖分板子 int a[N];//实际点权...原创 2020-02-21 15:12:16 · 219 阅读 · 0 评论 -
【模板】异或最小生成树
主要是借用了最小生成树的Boruvka算法的思想:在两个连通块内找到一条最短的路径,连接两个连通块合并成一个连通块那些年我用异或最小生成树做过的题:cf888g2020牛客暑期多校训练营(第五场)B Graph板子#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e6 + 10;int n, m, k;namespace XorMST { int原创 2020-08-02 10:36:06 · 342 阅读 · 0 评论 -
【模板】整数分块
图片来源 -> 整数分块基础那些年我用整数分块做过的题宁波市多校训练(二)· 最大限定倍数(Normal Version)2020牛客暑期多校训练营(第七场)· H Dividing板子for (ll l = 2, r; l <= lim; l = r + 1) { r = n / (n / l); if (r > lim) r = lim; res = (res + ((((r - l + 1) * 2) % mod)原创 2020-08-02 09:34:11 · 550 阅读 · 0 评论 -
【模板】单源最短路 Floyd + dijkstra + spfa
dijkstra 不能用来求最长路floyd 和 dijkstra 都不可以存在负环Floyddijkstraspfa原创 2020-07-30 19:33:23 · 292 阅读 · 0 评论 -
P3804 【模板】后缀自动机 (SAM) / P6139 【模板】广义后缀自动机(广义 SAM)
入门博客 后缀自动机 (SAM)sam线性解决:在另一个字符串中搜索一个字符串的所有出现位置。计算给定的字符串中有多少个不同的子串后缀自动机 (suffix automaton, SAM) 是用于处理单个字符串的子串问题的强力工具。而广义后缀自动机 (General Suffix Automaton) 则是将后缀自动机整合到字典树中来解决对于多个字符串的子串问题题目P3804 【模板】后缀自动机 (SAM)P6139 【模板】广义后缀自动机(广义 SAM)代码#include <原创 2020-07-29 16:02:09 · 296 阅读 · 0 评论 -
【模板】 二次剩余
求解x2=nmod px^2=n \mod px2=nmodp以及解一元二次方程#include <bits/stdc++.h>using namespace std;namespace QuadraticResidue { typedef long long ll; typedef pair<ll, ll> pll; ll qpow(ll a, ll b, ll m) { ll res = 1; a %=原创 2020-07-21 22:16:18 · 252 阅读 · 0 评论 -
【模板】最小生成树 · Kruskal + Prim
Kruskal 和 Prim 都可以有负边和负环,但是 Prim 在稠密图中比 Kruskal 优,在稀疏图中比 Kruskal 劣KruskalPrim#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int n, m, K;namespace Prim { //最小生成树...原创 2020-07-11 17:08:31 · 192 阅读 · 0 评论 -
【模板】带花树
学习博客[转载]无向图匹配的带花树算法 那些年我用带花树做过的题目:拆点 + 带花树 NIT21124 · 礼物分配问题(Hard Version)带花树板子#include <bits/stdc++.h>using namespace std;const int N = 300 + 10;int n, m;inline int read() { register int x = 0, t = 1; register char ch = getch原创 2020-07-08 22:12:06 · 292 阅读 · 0 评论 -
【模板】线段树板子
【洛谷日报#209】线段树分治总结线段树分治是用线段树的分治性维护时间区间,它可以支持撤销操作、或者说维护了一个操作影响的时间区间那些年我用线段树做过的题目:查区间第k小求区间最大值、和给一段区间的数×k\times k×k、给一段区间的数+k+k+k - P2023 [AHOI2009]维护序列 · 线段树统计区间内不同的数的个数 - P1972 [SDOI2009]HH的项链·...原创 2020-07-01 20:52:23 · 282 阅读 · 0 评论 -
【模板】支配树
学习博客支配树学习笔记与图论的邂逅03:Lengauer-Tarjan ← 原理介绍的不错一些相关的定义搜索树:有向无环图从根节点dfs时最先经过的边形成的树在搜索树上的边:任意(u→v),均存在 dfnu<dfnvdfn_u<dfn_vdfnu<dfnv不在搜索树上的边:任意(u→v),均存在 dfnu>dfnvdfn_u>dfn_vdfnu>dfnv支配点,也叫必经点: domdomdomdomxdom_xdomx :可以到达x的所有必经点原创 2020-06-28 21:54:43 · 382 阅读 · 0 评论 -
【模板】可输出数值下标的最大堆
// 优先队列 - 最大堆// data 存放数据 范围 -1e9~1e9// size 表示堆里面数据的个数// 记录下标版本 可以直接输出数据的下标// 前提 没有数值重复namespace maxHeap { int data[N];// 最大堆的数据 int size = 0;// 最大堆的个数 map<int, int> mp;// mp<值,下标> //堆里插入数据 void insert(int x) {原创 2020-06-26 20:04:10 · 130 阅读 · 0 评论 -
dp - 背包模型
01背包完全背包原创 2020-04-27 21:06:15 · 232 阅读 · 0 评论 -
“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛 G、血压游戏 · 虚树+dp
题解代码原创 2020-04-23 14:31:03 · 323 阅读 · 0 评论 -
P3803 【模板】多项式乘法(FFT)
题解P1919 【模板】A*B Problem升级版(FFT快速傅里叶)#include <bits/stdc++.h>using namespace std;const int N = 3e6 + 10;//2e6+10 reconst double pi = acos(-1);int n, m, k;typedef complex<double> ...原创 2020-04-09 20:53:28 · 147 阅读 · 0 评论 -
P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
题解十分简明易懂的FFT(快速傅里叶变换)FFT(最详细最通俗的入门手册)单位根:(ωn1)k=ωnk(\omega^1_n)^k=\omega^k_n(ωn1)k=ωnk(ωnk)2=(ωn1)2k=ωn2k(\omega^k_n)^2=(\omega^1_n)^{2k}=\omega^{2k}_n(ωnk)2=(ωn1)2k=ωn2kωnk=cos(kn2π)+isin...原创 2020-04-08 22:21:20 · 288 阅读 · 0 评论 -
P5496 【模板】回文自动机(PAM)
题解强势图解回文自动机回文自动机(PAM) 学习笔记回文自动机(PAM) 入门讲解关于回文串的一些性质:1.一个长度为 nnn 的字符串最多有 nnn 个本质不同的回文子串2.对于一个字符串 sss,如果在其之后新插入一个字符,那么最多产生一种新的回文子串回文自动机的应用:1.求串s前缀0~i内本质不同回文串的个数(两个串长度不同或者长度相同且至少有一个字符不同便是本质不同)2....原创 2020-04-01 22:34:38 · 233 阅读 · 0 评论 -
P3391 【模板】文艺平衡树 · Splay
题解离上一次写Splay已经过去很久了,所以我很理所当然地忘了orz…先讲一下做这道题的前置技能:主要是给上一次没有好好学的自己和没过多久肯定会忘的自己看的百度百科 - 伸展树Splay伸展树,也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。在伸展树上的一般操作都基于伸展操作:假设想要对一个二叉查找树执行一系列的查找操作,为了使整个查找时间更小,被查...原创 2020-03-30 23:35:44 · 195 阅读 · 0 评论 -
P4783 【模板】矩阵求逆
题解矩阵求逆 —— 初等变换法(高斯-约旦消元)#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e3 + 10;const int mod = 1e9 + 7;ll qpow(ll a, ll b) { a %= mod; ll res...原创 2020-03-29 20:45:45 · 182 阅读 · 1 评论 -
P3805 【模板】manacher算法
题解彻底搞懂马拉车(Manacher)用途:求一个字符串中有多少个回文子串代码#include <bits/stdc++.h>using namespace std;const int N = 3e7 + 10;int p[N];//以i为回对称中心的最长回文串int Manachar(string s) { // string类TLE警告 int ...原创 2020-03-28 21:59:10 · 142 阅读 · 0 评论 -
Codeforces Round #260 (Div. 2) E.Civilization · 并查集 + 树的直径
题解题意:n个城市m条边,可能存在多个连通块,q个询问,两种操作:1.查询x城市所在的连通块的最长路,2.合并x所在的连通块和y所在的连通块学习博客↓codeforces 456 E. Civilization(并查集+数的直径)在这里,最长路 = 树的直径在查树的直径的同时进行并查集操作,可以优化时间要使两个树合形成的新的直径最小,一定是两个直径中点相连,新的直径长度 = max(...原创 2020-03-28 19:28:04 · 176 阅读 · 0 评论 -
P5490 【模板】扫描线
题解学习博客↓题解 P5490 【【模板】扫描线】【学习笔记】扫描线扫描线建议纸上模拟一遍,这样才更加清晰记几个重点:假设从下往上扫描,每条边按照 yyy 值坐标从小到大排序,标记其是矩形的上底(标记为+1),还是下底(标记为-1)这样,对于每个矩形,扫描线总是会先碰到下边,然后再碰到上边建立一棵线段树,其每个端点维护一条线段(也就是一个区间)的信息:1.该线段被覆盖了多少次(...原创 2020-03-27 23:47:35 · 233 阅读 · 0 评论 -
P5960 【模板】差分约束算法 · spfa
题解学习博客↓题解 P5960 【【模板】差分约束算法】记几个重点:差分约束可以用最短路做,跑一遍最短路,此时最短路的答案 did_idi,也正是原不等式组的一个解 xix_ixi差分约束问题可以转化为最短路或最长路问题连边后求最短路 :将 xj−xi≤kx_j-x_i\leq kxj−xi≤k 变形为 xj≤xi+kx_j \leq x_i+kxj≤xi+k ,即从 ...原创 2020-03-27 21:11:44 · 309 阅读 · 0 评论 -
P4781 【模板】拉格朗日插值
拉格朗日插值法百度百科 - 拉格朗日插值法假设 n=4,内容来自百度百科 ↑所以,这是n个不同的点确定一条曲线??题解 P4781 【【模板】拉格朗日插值】大佬博客里面的链接里有讲到一些应用,值得看看代码#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N ...原创 2020-03-26 20:52:44 · 109 阅读 · 0 评论 -
【板子】树状数组
树状数组那些年我用树状数组干过的事:求前缀和给定整数序列的第i位,在当前还未出现的元素中是排在第几个P5367 【模板】康托展开 / 计算数列在全排列中的排名板子namespace BIT {//树状数组 int bit[N]; int lowbit(int x) { return x & (-x); } void add(int x, int...原创 2020-03-26 19:48:35 · 168 阅读 · 0 评论 -
P5367 【模板】康托展开 / 计算数列在全排列中的排名
百度百科 - 康托展开康拓展开X=a1∗(n−1)!+a2∗(n−2)!+...+an∗0!X=a_{1}*(n-1)!+a_{2}*(n-2)!+...+a_{n}*0!X=a1∗(n−1)!+a2∗(n−2)!+...+an∗0!其中,aia_iai 表示给定整数序列的第i位在当前还未出现的元素中是排在第几个可用于求当前序列在全排列中的排名 =X+1=X+1=X+1逆康拓展开...原创 2020-03-26 19:39:29 · 507 阅读 · 0 评论 -
P1886 滑动窗口 /【模板】单调队列
学习来源↓题解 P1886 【滑动窗口】性质:学习来源队列中的元素其对应在原来的列表中的顺序必须是单调递增的 - 说的是 for(1~n)队列中元素的大小必须是单调递*(增/减/甚至是自定义也可以)单调队列与普通队列不一样的地方就在于:单调队列既可以从队首出队,也可以从队尾出队代码#include <bits/stdc++.h>using namespace ...原创 2020-03-25 20:40:02 · 260 阅读 · 0 评论 -
P1265 公路修建·最小生成树prim
题解诶 就是个prim板子题prim:以点为中心,每次找离树最近的点加入到树上d[i] 记录的是当前点i到附近最近的点的距离memset不适用double类型数组的填充#include <bits/stdc++.h>using namespace std;const int N=1e6+10;bool vis[N];double d[N];//d[i]记录的是当...原创 2020-01-30 21:11:00 · 156 阅读 · 0 评论 -
P3389 【模板】高斯消元法
高斯消元解线性方程#include <bits/stdc++.h>using namespace std;const int N = 1e4 + 10;const double eps = 1e-7;int n, m, K;double a[N][N];int Gass(int n) { int c, r;//col row for (c = 1, r ...原创 2020-03-19 19:16:52 · 83 阅读 · 0 评论 -
【模板】欧拉函数
欧拉函数对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目设 N=p1a1∗p2a2∗...∗pnanN=p_1^{a_1}*p_2^{a_2}*...*p_n^{a_n}N=p1a1∗p2a2∗...∗pnanϕ(N)=N(1−1p1)(1−1p2)...(1−1pn)\phi (N)=N(1-\cfrac{1}{p_1})(1-\cfrac{1}{p_2})......原创 2020-03-18 22:27:24 · 238 阅读 · 0 评论 -
【模板】组合数
Cnm=Cn−1m−1+Cn−1mC^{m}_{n}=C^{m-1}_{n-1}+C^{m}_{n-1}Cnm=Cn−1m−1+Cn−1m// n 2e3 // O(n*n)#include <bits/stdc++.h>using namespace std;const int N = 2e3 + 10;int n, m, k;int C[N][N];voi...原创 2020-03-18 21:49:30 · 161 阅读 · 1 评论 -
P1495 【模板】中国剩余定理(CRT)/曹冲养猪
题解原创 2020-03-12 19:37:41 · 296 阅读 · 1 评论 -
【模板】KMP
从头到尾彻底理解KMP(2014年8月22日版)Next[i]表示第i个字符之前的最大公共前后缀的长度在跳转的过程当中又有定位坐标的作用,跳到匹配串的拥有相同的前缀的子串的后一个位置(因为下标从0开始)int Next[N];//要从下标0开始存字符串void getNext(string p) {//匹配串 int plen = p.length(); Next[0] ...原创 2020-03-09 22:15:41 · 204 阅读 · 0 评论 -
有向图的拓扑序列
由于有输出要求,所以用数组更加方便#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e6 + 10;vector<int> g[N];int n, m, K;int d[N],q[N];bool topo() { int h = 0; ...原创 2020-03-09 22:15:11 · 331 阅读 · 0 评论 -
归并排序 · 求逆序对
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e6 + 10;int n, res, K;int a[N], b[N];void merge(int l, int r) { if (l >= r) return; int mid...原创 2020-03-07 15:59:02 · 56 阅读 · 0 评论 -
P3796 【模板】AC自动机(加强版)
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e6 + 10;int n, m, k;struct Ans { int pos, num; bool operator<(Ans &b) const { if (...原创 2020-02-27 20:11:26 · 120 阅读 · 0 评论