洛谷
Zaller
acm退休,考研ing...
无偿给同校学弟学妹们解答;
博客若有看不懂的或者不对的地方,直接私信我就行(如果我回复晚了,对不起都是我的错);
不用太客气等我回复,有问题直接私信发:)
ps: 随缘上线
展开
-
【模板】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 · 421 阅读 · 0 评论 -
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 · 196 阅读 · 0 评论 -
P3804 【模板】后缀自动机 (SAM) / P6139 【模板】广义后缀自动机(广义 SAM)
入门博客 后缀自动机 (SAM)sam线性解决:在另一个字符串中搜索一个字符串的所有出现位置。计算给定的字符串中有多少个不同的子串后缀自动机 (suffix automaton, SAM) 是用于处理单个字符串的子串问题的强力工具。而广义后缀自动机 (General Suffix Automaton) 则是将后缀自动机整合到字典树中来解决对于多个字符串的子串问题题目P3804 【模板】后缀自动机 (SAM)P6139 【模板】广义后缀自动机(广义 SAM)代码#include <原创 2020-07-29 16:02:09 · 342 阅读 · 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 · 178 阅读 · 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 · 331 阅读 · 0 评论 -
P5496 【模板】回文自动机(PAM)
题解强势图解回文自动机回文自动机(PAM) 学习笔记回文自动机(PAM) 入门讲解关于回文串的一些性质:1.一个长度为 nnn 的字符串最多有 nnn 个本质不同的回文子串2.对于一个字符串 sss,如果在其之后新插入一个字符,那么最多产生一种新的回文子串回文自动机的应用:1.求串s前缀0~i内本质不同回文串的个数(两个串长度不同或者长度相同且至少有一个字符不同便是本质不同)2....原创 2020-04-01 22:34:38 · 270 阅读 · 0 评论 -
P3391 【模板】文艺平衡树 · Splay
题解离上一次写Splay已经过去很久了,所以我很理所当然地忘了orz…先讲一下做这道题的前置技能:主要是给上一次没有好好学的自己和没过多久肯定会忘的自己看的百度百科 - 伸展树Splay伸展树,也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。在伸展树上的一般操作都基于伸展操作:假设想要对一个二叉查找树执行一系列的查找操作,为了使整个查找时间更小,被查...原创 2020-03-30 23:35:44 · 229 阅读 · 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 · 204 阅读 · 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 · 172 阅读 · 0 评论 -
P5490 【模板】扫描线
题解学习博客↓题解 P5490 【【模板】扫描线】【学习笔记】扫描线扫描线建议纸上模拟一遍,这样才更加清晰记几个重点:假设从下往上扫描,每条边按照 yyy 值坐标从小到大排序,标记其是矩形的上底(标记为+1),还是下底(标记为-1)这样,对于每个矩形,扫描线总是会先碰到下边,然后再碰到上边建立一棵线段树,其每个端点维护一条线段(也就是一个区间)的信息:1.该线段被覆盖了多少次(...原创 2020-03-27 23:47:35 · 271 阅读 · 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 · 356 阅读 · 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 · 137 阅读 · 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 · 546 阅读 · 0 评论 -
P1886 滑动窗口 /【模板】单调队列
学习来源↓题解 P1886 【滑动窗口】性质:学习来源队列中的元素其对应在原来的列表中的顺序必须是单调递增的 - 说的是 for(1~n)队列中元素的大小必须是单调递*(增/减/甚至是自定义也可以)单调队列与普通队列不一样的地方就在于:单调队列既可以从队首出队,也可以从队尾出队代码#include <bits/stdc++.h>using namespace ...原创 2020-03-25 20:40:02 · 281 阅读 · 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 · 104 阅读 · 0 评论 -
《算法竞赛进阶指南》/ P1082 同余方程
题解ax=1 (mod b)ax=1\,(mod\,b)ax=1(modb)等同于 ax+by=1ax+by=1ax+by=1扩展里的板子贴一下就好最后取最小的x正整数x=xmin+kbx=x_{min}+kbx=xmin+kbxmin=x % bx_{min}=x\,\%\,bxmin=x%b由于x可能本来就是负的,为了保证是正整数,在+b%b就好了#include &...原创 2020-03-13 20:20:11 · 149 阅读 · 0 评论 -
P1495 【模板】中国剩余定理(CRT)/曹冲养猪
题解原创 2020-03-12 19:37:41 · 363 阅读 · 1 评论 -
P2763 试题库问题 · 网络流
题解题目有误,一个题目被采用,只能对应一个类型,关键 · 大佬的图:关于路径:枚举每个类型,枚举其与试题的连边,如果反向边(从类型出发到试题的边是反向边)有值输出,因为正向边一定为0,也就是从试题流向了类型,#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N =...原创 2020-02-22 23:06:33 · 187 阅读 · 0 评论 -
P2486 [SDOI2011]染色 ·树链剖分+线段树
题解我们知道树链剖分板子里第二次dfs将会为节点重新分配编号,每一条重链上的编号都是连续的,对应线段树的一段区间,编号越小越靠近树根,在这道题里,主要难在大区间分割小区间时,小区间与小区间之间的端点的颜色,如果相同,这两个区间本该是连在一起的,显然,我们应该记下每个区间左右端点的颜色,值得注意的是,在树链上统计答案的时候,由于树链的编号不一定连续,所以每统计一个区间的个数后,还需要和上一次的...原创 2020-03-04 20:34:16 · 140 阅读 · 0 评论 -
P2414 [NOI2011]阿狸的打字机 · AC自动机 + fail树 + 树状数组
题解学习来源 · 大佬博客直通车在ac自动机里,如果字符串a可以通过fail指针指向字符串b,那么就说明a串中包含b串问y串中有多少个x串,等同于问:y中有多少个节点的fail指针直接或间接指向x的末尾节点可以看到主要是根据fail进行跳转,建立ac自动机后,以fail的角度看,其构造形似是一颗树,那么就可以抛弃掉ac自动机这颗trie树,建立起以fail为关系的树,现在我们把它就做...原创 2020-02-29 14:37:00 · 163 阅读 · 0 评论 -
P2444 [POI2000]病毒 · AC自动机 + dfs
题解做做笔记 - 我又可以懂ac自动机了orz已知,AC自动机是一种多模字符串匹配算法:构造tire树后,在模式串末尾最后一位的节点上标记,而平常的AC自动机,是尽量多的接触这些标记,这道题要求是避免的接触这些结束标记那么从根节点开始,往trie树上跑,能用失配指针跳转就跳转,然后就会发现你陷入了一个死循环,因为如果不是循环,最后结束的位置就一定会有某个病毒的结束标记且,在处理t...原创 2020-02-27 23:23:20 · 166 阅读 · 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 · 141 阅读 · 0 评论 -
P3369 【模板】普通平衡树 stl / treap / splay / AVL
STL#include <bits/stdc++.h>using namespace std;int n, m, k;vector<int>v;int main() { ios::sync_with_stdio(0); cin>>n; for (int i = 1,op,x; i <= n; ++i) { ...原创 2020-02-27 11:55:55 · 455 阅读 · 1 评论 -
P2153 [SDOI2009]晨跑 · 费用流+拆点
题解根据需求大概建立以下模型:跑过路程最短每条路只能走一次出了第一个点和最后一个点,其他点都只能走一次从第一个点走到最后一个点,最多可以走多少次这好像是:最短路网络流流容量为1的边拆点最小割,也就是最大流这不就是费用流嘛~板子套一下就好了有不能理解拆点的吗?可以看看我另外一篇博客 P2766 最长不下降子序列问题 · LIS + 网络流 + 拆点#incl...原创 2020-02-26 15:56:36 · 112 阅读 · 0 评论 -
P2805 [NOI2009]植物大战僵尸 · 网络流最大权闭合子图+ 拓扑排序
题解题解 P2805 【[NOI2009]植物大战僵尸】最大权闭合子图最大权闭合子图就是原图中点权和最大的闭合子图最大权闭合子图问题可以使用最小割解决OVO!。最大权 = 正点权和 - 最小割首先,所有不连向 SS 或 TT 的边容量都是 INFINF ,不可能被割掉。这样,能被割掉的边只有连向 SS 或 TT 的边(这样的割被称为 简单割 )。...原创 2020-02-26 15:25:43 · 199 阅读 · 0 评论 -
P2774 方格取数问题 ·网络流最小割
题解网络流24题清晰易懂 ·太清晰了 直接去大佬博客里看吧将网格图按照坐标以奇偶性建立二分图,网格与其周围四个位置相连,边权为INF,能删掉一个元素,表示不取这个方格 - - - 删掉连向方格的边删掉的代价为方格的权值 - - - 边权为方格的权值要么删掉的总是保证策略最优,要么能反悔 - - - 网络流搞一搞最终状态为没有互斥的方格 - - - 割#include <...原创 2020-02-25 16:59:04 · 160 阅读 · 0 评论 -
P2766 最长不下降子序列问题 · LIS + 网络流+拆点
题解网络流24题第一问:LIS,动态规划,好久没做LIS了都忘掉了orz因为 n≤500n\le 500n≤500 比较小,用了O(n2)O(n^2)O(n2)的方法void LIS(){ for (int i = 1; i <= n; ++i) { dp[i]=1;//以i为结尾的子序列的最大长度 for (int j = 1; j <...原创 2020-02-24 21:14:57 · 182 阅读 · 0 评论 -
P2765 魔术球问题 · 二分+网络流
题解看重点·这位大佬讲的很详细了记几个解题重点:后来我发现基本上都是重点隐式图:对于某些看着不像是图论的题目,但可以通过一些限制或关联进行建点、连边,最终通过图论的一些算法来求解本题的柱子没有什么实际作用,所有操作都是关于珠子编号的以每一个珠子为点,若满足条件(编号相加为平方数)就两两连边对于题意:对于给定的n,计算在n根珠子上最多能放多少个球可以转化为:对于给定的n,计算不超过n条...原创 2020-02-21 20:45:33 · 232 阅读 · 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 · 243 阅读 · 0 评论 -
P3386 【模板】二分图匹配 · 匈牙利算法 / 网络流 / KM / 费用流
题意:求最大匹配匈牙利算法入门匈牙利算法 O(nm)O(nm)O(nm)#include <bits/stdc++.h>using namespace std;const int N=1e3+10;const int INF=0x3f3f3f3f;int n,m,k;namespace Match{//匈牙利算法 int set_a;//集合a的大小...原创 2020-02-19 23:07:17 · 184 阅读 · 0 评论 -
P3381 【模板】最小费用最大流
最小费用 == 最短路费用流 在参与网络上寻找最短路最大流量只有一个 流法却有很多种 即要保持最大流又要保持最小费用 所以需要最短路由于dijkstra不能跑负权边 所以基本上用的都是spfa但是如果可以采用一种方法加上一个基准值base 将所有数据都跑在整数的话就可以了(可是dijsktra做这道好像会T)#include <bits/stdc++.h>using nam...原创 2020-02-19 21:52:41 · 214 阅读 · 0 评论 -
P3384 【模板】重链剖分
树链剖分学习#include <bits/stdc++.h>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int N=1e6+10;struct egde{ int to,next;}e[N];int head[N],tot;...原创 2020-02-17 22:42:29 · 135 阅读 · 0 评论 -
P3377 【模板】左偏树(可并堆)
左偏树是一个可并堆。它满足堆的性质,并且能够在log的时间下合并两颗左偏树看大佬博客学习左偏树博客的代码好像过不了洛谷最后一个点,T了,感觉问题出在find()函数上定义:从名字上看,它是一棵树。其实它还是一棵二叉树。它的节点上存4个值:左、右子树的地址,权值,距离。权值就是堆里面的值。距离表示这个节点到它子树里面最近的叶子节点的距离。叶子节点距离为0。四个关键的性质:1.节点的权值...原创 2020-02-13 22:57:46 · 230 阅读 · 0 评论 -
P3379 【模板】最近公共祖先(LCA)
向大佬学习学习带常数优化的lca#include <bits/stdc++.h>using namespace std;const int N=5e5+10;int n,m;int r;//rootint d[N];//分层 depthint f[N][40];//倍增跳跃 f[u][i]表示u向上跳2^i格的祖先struct edge{ int ne...原创 2020-02-09 23:10:25 · 159 阅读 · 0 评论 -
P3808 【模板】AC自动机(简单版)
学习1:小蒟蒻yyb的博客学习2:大佬的板子AC自动机:求多个模式串在文本串中出现的次数#include <bits/stdc++.h>using namespace std;const int N=1e6+10;int n,m,k;struct Tree{//字典树 int fail;//失配指针 int vis[26];//子节点位置 int...原创 2020-02-05 21:39:44 · 150 阅读 · 0 评论 -
P2023 [AHOI2009]维护序列 · 线段树
题解吐血线段树有了懒标记,不管写多少次都那么要命添加两个懒标记:add 和 mul对于每个区间来说都有以下公式:区间的值 = ( 区间和 + 新加的数 ) * 新乘的数详细见代码#include <bits/stdc++.h>using namespace std;typedef long long ll;#define lson l,mid,rt<<...原创 2020-02-03 18:32:56 · 167 阅读 · 0 评论 -
P1198 [JSOI2008]最大数 · 线段树
题解线段树动态查询初始区间范围为0,都不需要建树build#include <bits/stdc++.h>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int N=1e6+10;const int INF=0x3f3f3f3f;...原创 2020-02-03 16:50:58 · 122 阅读 · 0 评论 -
P1972 [SDOI2009]HH的项链· 主席树 / 树状数组 / 线段树 / 分块
题解代码参考这位大佬离线线段树树状数组在线主席树莫队原创 2020-02-02 20:42:22 · 238 阅读 · 0 评论 -
P1983 车站分级 · 拓扑/线段树+虚拟点优化
题解版本0:差分,差分没办法解决样例1版本1:拓扑建图,从级别低的车站流向级别高的车站版本2:用线段树优化拓扑就是将区间缩成点了,详情见代码拓扑排序#include <bits/stdc++.h>using namespace std;typedef pair<int,int> pii;const int N=1e3+10;bool vis[...原创 2020-02-02 01:49:48 · 178 阅读 · 0 评论 -
P1268 树的重量 · 思维
题解本人过于懒惰,直接去看官方题解吧新的分支的公式推导:dis=min(dis, (g[i][k]+g[k][j]-g[i][j])/2 );大致为:在已经绘制好的前k-1个节点的图的基础上,绘制第k个节点,在前k-1个节点间,枚举端点i,j,找到最短的抽出的分支#include <bits/stdc++.h>using namespace std;const i...原创 2020-02-01 22:52:09 · 214 阅读 · 0 评论