![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法总集
文章平均质量分 68
Genevieve_xiao
还未而立却想躺平的蒟蒻oier和ta的渗透学习ing 应付高考停更
2021.11.20 AFO.
展开
-
【基础算法】二分 整数二分与浮点数二分
整数二分整数二分最重要的就是处理好边界问题。以下两种模板就可以基本解决所有此类问题。首先我们可以制定一个标准,将一个答案区间分为两个部分。这个判断标准一般称之为check()函数。(比如这里的标准可以确定为 当前数是大于等于x还是小于等于x //x为所求数)接下来需要思考所求的答案是1(左边区间的右边界)还是2(右边区间的左边界)。模板1如果所求为1则check函数应指向绿色区间。 while(l<r){ int mid=(l+r+1)>>1;原创 2022-05-03 15:43:44 · 336 阅读 · 0 评论 -
【基础算法】排序 快速排序与归并排序
排序快速排序快排的基本思想是分治。时间复杂度为nlogn,是一种十分理想的排序方式,通过c++的stl可以直接使用sort来实现,但是快排的实现原理依旧值得研究,并且面试中也时常会遇到。手写快排时常常会遇到边界问题,需要特别注意。步骤:每次在当前区间中选择一个基准数x,x可以为q[l],q[r],q[l+r>>1]选取两个指针分别从区间的左右端点开始,左指针i遇到第一个大于等于基准数的值就停下,右指针j遇到第一个小于等于基准数的值就停下,然后交换这两个值ij指针按照上部规则继续原创 2022-03-04 14:21:12 · 813 阅读 · 0 评论 -
【考试】list2
目录知识点题目1.邮票 Stamps2.木棍加工3.种树4.钓鱼5.[NOIP2015 普及组] 推销员6.[NOIP2013 普及组] 车站分级7.Work Scheduling G8.[NOIP2015 提高组] 斗地主9.扇区填数10.[AHOI2018初中组]分组11.三角形牧场12.[NOI2014] 起床困难综合症13.[NOIP1999 提高组] 旅行家的预算14.[NOIP2012 提高组] 国王游戏15.[国家集训队]特技飞行16.[NOIP2010 提高组] 关押罪犯17.[HAOI20转载 2021-11-17 23:03:03 · 205 阅读 · 0 评论 -
【考试】list1
一些复习总结暴力好题字符串匹配微信步数宝藏 ——搜索回文 ——贪心+搜索多叉堆 ——组合Emiya家今天的饭模拟好题儒略日网络连接时间复杂度表达式——栈划分合并类dp通过划分合并来维护一个单调不减的序列贪心偶尔会出问题P5665划分signed main(){ n=read(); type=read(); for(int i=1;i<=n;i++){ a[i]=read(); s[i]=s[i-1]+a[i]; //前缀和 } for(int i=1;原创 2021-11-17 22:55:34 · 92 阅读 · 0 评论 -
【数据结构】字典树Trie
Tireint son[N][26], cnt[N], idx;char str[N];void insert(char *str){ int p=0; for(int i=0;str[i];i++){ int u=str[i]-'a'; if(!son[p][u]) son[p][u]=++idx; p=son[p][u]; } cnt[p]++;}int query(char *str){ int p=0; for(int i=0;str[i];i++){ int原创 2021-11-17 22:48:10 · 363 阅读 · 0 评论 -
【图论】【网络流】概念总结
网络流总结最大流模型Dinic 最大流板子无源汇上下界可行流有源汇上下界最大流有源汇上下界最小流多源汇最大流最大流之关键边拆点最小割模型最大权闭合图最大密度子图最小权点覆盖集最大独立点集费用流模型最大流模型Dinic 最大流板子注意三个优化:· flow < lim 当前流不能大于上一层限制· now[u]=i 当前弧优化· if(flow==0) dep[u]=0; 我与终点不连通 上一层不要信任我无源汇上下界可行流建图:对于新图的每个边 f′(u,v)=cu(u,v)−cl原创 2021-11-07 10:25:55 · 312 阅读 · 1 评论 -
【图论】【网络流】费用流模型
费用流模型费用流板子费用流板子#include<iostream>#include<cstdio>#include<queue>#include<cstring>#define inf 0x3f3f3f3fusing namespace std;const int N=5010,M=100100;int n,m,S,T,cnt=1;int dis[N],vis[N],incf[N],pre[N],head[N];struct node原创 2021-11-07 09:46:42 · 251 阅读 · 0 评论 -
【图论】【网络流】最小割模型
最小割最小割应用——01规划问题Acwing 2280. 最优标号AcWing 2279. 网络战争最大权闭合图Acwing 961. 最大获利最大密度子图带点权带边权带点边权最小点权覆盖集 / 最大独立集最小割应用——01规划问题Acwing 2280. 最优标号Acwing 2280. 最优标号给定一个无向图 G=(V,E),每个顶点都有一个标号,它是一个 [0,231−1] 内的整数。不同的顶点可能会有相同的标号。对每条边 (u,v),我们定义其费用 cost(u,v) 为 u 的标号与原创 2021-11-07 09:46:18 · 621 阅读 · 0 评论 -
【树】【动态规划】关于树上的一些问题
树的直径树的直径,又称树的最长链,定义为一棵树上最远的两个节点的路径,即树上一条不重复经过某一条边的最长的路径。树的直径也可以代指这条路径的长度。树上任意点能到的最远点,一定是树的直径的某个端点。求解树的直径有两种方法 时间复杂度都为O(n)O(n)O(n)方法一 两遍搜索:从树上任意点u开始DFS(BFS)遍历图,得到距离u最远的结点v,然后从v点开始DFS遍历图,得到距离v最远的结点w, 则v、w之间的距离就是树的直径。方法二 树形dp:DP:显然最长路的两个端点必然是叶子或者根节点。设原创 2021-11-03 21:01:40 · 322 阅读 · 1 评论 -
【图论】【网络流】最大流模型
#include<iostream>#include<cstdio>#include<queue>#include<cstring>typedef long long ll;using namespace std;const int N=2005;const int M=100005;int n,m,s,t,cnt=1;int head[N],now[N];ll dep[N],ans;struct node{ int to,nex原创 2021-11-01 22:09:35 · 582 阅读 · 1 评论 -
【动态规划】线性dp之子序列模型
走格子模型原创 2021-10-31 16:04:18 · 118 阅读 · 0 评论 -
【动态规划】到达型dp
到达型dp一般将dp数组设为bool型,常用位运算| 实现状态的传递。P2663 越越的组队本题状态设计很特殊:dp[i][j]dp[i][j]dp[i][j]表示前iii个人能否达到jjj分。bool dp[110][11000];int main(){ cin>>n; dp[0][0]=1; for(int i=1;i<=n;i++){ cin>>a[i]; sum+=a[i]; } for(int i=1;i<=n;i++){ for(原创 2021-10-29 14:23:01 · 202 阅读 · 0 评论 -
【动态规划】求最大加权矩形的两种方法 二维前缀和 矩阵压缩
矩阵压缩int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ scanf("%d",&x); a[i][j]=a[i-1][j]+x; //求列前缀和 } } for(int i=1;i<=n;i++){ for(int k=1;k<=i;k++){ int f[N]={0},dp[N]={0}; for(int j=1;j<原创 2021-10-29 14:12:16 · 238 阅读 · 0 评论 -
【数学】卡特兰数
卡特兰数卡特兰数是一个数列,其前几项为(从第零项开始) :1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700,1767263190,6564120420,24466267020,91482563640,343059613650,1289904147324,4861946401452,…1, 1, 2, 5, 14, 42, 132, 429, 1430原创 2021-10-28 14:04:49 · 1273 阅读 · 0 评论 -
【字符串】表达式求值
转载后缀表达式处理模板#include<iostream>#include<cstdio>#include<cstring>#include<stack>#include<cmath>#include<algorithm>#define Maxn 100000using namespace std;int n,m;stack<int> s1;stack<char> s2;inline i转载 2021-10-27 18:06:25 · 287 阅读 · 1 评论 -
【高精度】重载运算之高精加减乘除模
这是我见过的最好写的高精度板子重载运算符也太香了吧洛谷传送门 P1932 A+B A-B A*B A/B A%B Problem#include<iostream>#include<cstdio>#include<cstring> using namespace std;struct data{ int num[20100]; int len; char op; data(){memset(num,0,sizeof(num)); len=1; op原创 2021-10-27 18:02:35 · 469 阅读 · 1 评论 -
【数学】斯特林数
第一类斯特林数第一类Stirling数表示将 n 个不同元素构成m个圆排列的数目。s(n,m)=s(n−1,m−1)+s(n−1,m)∗(n−1)s(n,m)=s(n-1,m-1)+s(n-1,m)*(n-1)s(n,m)=s(n−1,m−1)+s(n−1,m)∗(n−1)递推式int stir1(int n,int m){ if(dp[n][m]!=-1) return dp[n][m]; else return dp[n][m]=stir1(n-1,m-1)+stir1(n-1,m)*(n-原创 2021-10-27 16:40:24 · 184 阅读 · 0 评论 -
【算法】模板汇总
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-10-23 12:04:32 · 422 阅读 · 0 评论 -
【并查集】扩展域 带边权 离散化
并查集板子const int N=10010;int n,m;int fa[N];int find(int k){ if(fa[k]==k) return k; else return fa[k]=find(fa[k]);}int main(){ cin>>n>>m; for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++){ int x,y,z; cin>>z>>x原创 2021-10-23 11:53:35 · 101 阅读 · 0 评论 -
【搜索】dfs走格子求最长路径 ——P1560 蜗牛的旅行
看似bfs的dfs题bfs存不了状态例题:P1560 [USACO5.2]蜗牛的旅行Snail TrailsSally Snail 喜欢在N x N 的棋盘上闲逛(1 < n <= 120)。她总是从棋盘的左上角出发。棋盘上有空的格子(用“.”来表示)和B 个路障(用“#”来表示)。萨丽总是垂直(向上或者向下)或水平(向左或者向右)地走。她可以从出发地(总是记作A1 )向下或者向右走。一旦萨丽选定了一个方向,她就会一直走下去。 如果她遇到棋盘边缘或者路障,她就停下来,并且转过90 度原创 2021-10-04 18:53:59 · 413 阅读 · 0 评论 -
【贪心】最大子矩形问题
思路:国家队wzk大佬的论文《浅谈用极大化思想解决最大子矩形问题》例题:洛谷传送门 P1578 奶牛浴场题目描述由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少。为了讨好奶牛,John决定在牛场中建造一个大型浴场。但是John的奶牛有一个奇怪的习惯,每头奶牛都必须在牛场中的一个固定的位置产奶,而奶牛显然不能在浴场中产奶,于是,John希望所建造的浴场不覆盖这些产奶点。这回,他又要求助于Clevow了。你还能帮助Clevow吗?John的牛场和规划的浴场都是矩形。浴场要完全位于牛场之原创 2021-10-04 18:47:55 · 142 阅读 · 0 评论 -
【图论】【树】二叉树遍历
二叉树的前中后序遍历前序遍历void find(int x){ printf("%d ",x); if(e[x].lc!=0) find(e[x].lc); if(e[x].rc!=0) find(e[x].rc);}中序遍历void find(int x){ if(e[x].lc!=0) find(e[x].lc); printf("%d ",x); if(e[x].rc!=0) find(e[x].rc);}后序遍历void find(int x){ if(e[x].l原创 2021-09-20 22:47:53 · 110 阅读 · 0 评论 -
【图论】最短路问题
最短路问题FloydSpfaDijkstra原创 2021-09-20 21:59:24 · 305 阅读 · 0 评论 -
【图论】【树】LCA最近公共祖先
LCALCA (Lowest Common Ancestors) 最近公共祖先。对于有根树TTT的两个结点uuu、vvv,最近公共祖先 LCA(T,u,v)LCA(T,u,v)LCA(T,u,v) 表示一个结点xxx,满足xxx是uuu和vvv的祖先且xxx的深度尽可能大。在这里,一个节点也可以是它自己的祖先。解决LCA问题我们有两种做法:暴力和倍增。暴力无需多言使用链式前向星,将整棵树看为无向无环图,双向加边。dfs标记父亲节点,标记深度。将需要查询的两个点调整为同一深度,若两个点仍不原创 2021-08-17 22:11:04 · 133 阅读 · 0 评论 -
【数据结构】RMQ问题之ST表算法
RMQ问题RMQ (Range Minimum/Maximum Query) 问题 是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n)RMQ(A,i,j)(i,j<=n)RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,ji,ji,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。主要方法及复杂度如下:朴素搜索,O(n)−O(qn)O(n)-O(qn)O(n)−O(qn) 。线段树,O(n)−O(qlogn)O(n)-O(qlo原创 2021-08-17 20:32:04 · 315 阅读 · 0 评论 -
【图论】差分约束系统
差分约束系统如果一个系统由n个变量和m个约束条件组成,形成m个形如ai-aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。...原创 2021-08-12 14:01:04 · 279 阅读 · 0 评论 -
【图论】拓扑排序
拓扑排序 Toposort对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点 uuu 和 vvv ,若边<u,v>∈E(G)<u,v>∈E(G)<u,v>∈E(G),则u在线性序列中出现在vvv之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。拓扑排序删边操作步骤统计所有点的入度将入度为 0原创 2021-08-11 18:33:12 · 435 阅读 · 0 评论