模板
cnyali_szsh348
这个作者很懒,什么都没留下…
展开
-
费用流
最小费用路算法【最小费用最大流】:在实际应用中不仅需要考虑流量,还要考虑费用。我们希望建立一个费用最小,流量最大的网络,即最小费用最大流两种思路:(1):最小费用路算法(2):消圈算法做法:(1):创建混合网络(2):找最小费用路(3):沿着增广路径正向增流d,反向减流d...原创 2020-02-26 19:28:24 · 137 阅读 · 0 评论 -
网络流
最短增广路算法:网络是一个带权有向图,包含一个源点和一个汇点,没有反平行边。网络传输都有方向和容量。例题:从s城到t城,中途经过若干个城市,每两个城市之间有它的容量,求从s到t每天最多能运多少货物?网络流:网络流即网络上的流,是定义在网络边集E上的一个函数可行流:满足下列条件:1.容量约束每个管道的实际流量flow不能超过该管道的cap2.能量守恒流入=流出【除源点汇点】源点s:...原创 2020-02-26 09:36:31 · 135 阅读 · 0 评论 -
矩阵
Q1:何为矩阵?一个mn的由整数构成的图案:如:32的矩阵:[ 1 2 ][ 3 4 ][ 5 6 ]矩阵的加减法:1 2 11 12 12 143 4 + 13 14= 16 185 6 15 16 20 22结论:矩阵加or减法:对于两个分别为A[n][m]和B[n][m]的矩阵相加:答案C[i][j]=A[i][j]+B[i][j]。减法则为:C...原创 2020-02-03 22:40:35 · 216 阅读 · 0 评论 -
Catlan数 2019.11.07
模板1模板2模板3代码#include <bits/stdc++.h>using namespace std;const int maxn=3000+10,MOD=1e9+7;long long a[maxn],n,ans,t;int main(){ a[0]=1;//初始化a[0]=1 scanf("%lld",&t); for(int i=1;i<...原创 2019-11-07 16:45:12 · 108 阅读 · 0 评论 -
luogu P1629 邮递员送信 题解
链接题目描述有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要一定的时间。这个邮递员每次只能带一样东西。求送完这N-1样东西并且最终回到邮局最少需要多少时间。输入格式第一行包括两个整数N和M。第2到第M+1行,每行三个数字U、V、W,表示从A到B有一条需要W时间的道路。 ...原创 2019-11-03 20:05:17 · 333 阅读 · 0 评论 -
2019-02-24 二维凸包
二维凸包:#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int maxn=100000+10;int n,top=2;double ans;struct node{//存储直角坐标系的x和y值 double x,y;};node p[maxn],z[maxn];bool cmp(node u,node v){//...原创 2019-02-24 20:30:55 · 143 阅读 · 0 评论 -
最小生成树模板
#include <bits/stdc++.h>using namespace std;const int maxn=500001;int fa[maxn],n,m,ans,s;struct edge{ int x,y,z;}a[500001];bool cmp(edge x,edge y){ return x.z<y.z;}int find(int x...原创 2019-03-04 21:46:57 · 109 阅读 · 0 评论 -
2019-03-10 离散化
USACO 3.1.4cpp:#include <bits/stdc++.h>using namespace std;const int maxn=2001;struct lrj233{ int x1,x2,y1,y2,c;}sp[maxn];int p[maxn][maxn],ys[maxn],a,b,n,cntx,cnty,tx[maxn],ty[maxn],ta[...原创 2019-03-10 20:57:02 · 116 阅读 · 0 评论 -
2019-04-09 线段树
P3372 线段树1线段树模板(LAZY):#include <bits/stdc++.h>const int maxn=100000+10;using namespace std;long long c[maxn*4],sum,lazy[maxn*4];void init(int h,int s,int t){ int mid=(s+t)/2; if(s=...原创 2019-04-09 20:31:45 · 80 阅读 · 0 评论 -
2019-05-21 图进阶
割顶的定义:对于无向图G,如果删除某个点u之后,联通分量数量增加,则称u为图的割顶。DFS时标记每个点遍历的次序为dfn规定low(u)为u及其后代所能连回的最早祖先的dfn值如:该图中,A B C D Edfn 1 2 3 4 5low 1 2 3 3 3因为e有一条边可连回c(图上未标),所以c,d,e三点的low值都为c的dfn值——3求割顶代码:...原创 2019-05-21 20:15:31 · 86 阅读 · 0 评论 -
2019-06-02 ST表
ST算法:QM:求最值练习题——忠诚f[i][j]表示从i开始的连续2^j个数的最值f[i][j]=max(f[i][j-1],f[i+2^(j-1)][j-1])g[1][8]=max(g[1][4],g[5][8])f[1][3]=max(f[1][2],f[1+2^2][2])2 5 1 3 9 8 6 7 4 2f[i][0]=a[i];f[i][0]=2 5 1 3 9...原创 2019-06-02 20:03:39 · 122 阅读 · 0 评论 -
2019-06-11 LCA
LCA思路一:暴力算法(会T3个点),直接从需要搜索的点向上,并将路径记录下来,再进行对比即可。代码:#include<bits/stdc++.h>using namespace std;const int maxn=500000+5;vector<int>e[maxn];int d[maxn],f[maxn];void dfs(int x,int fa){...原创 2019-06-11 19:56:27 · 96 阅读 · 0 评论 -
DP入门——2019-7-13
引入:先从一道简单的小奥题开始(然而我并不会)已知一个n行m列的表格,求从左上角至右上角总共的方案数,只能往右或下走。可以很轻松地得出,状态转移方程为f[i][j]=f[i-1][j]+f[i][j-1]代码:#include <iostream>#include <cstdio>#include <cstring>using namespace ...原创 2019-07-13 20:08:44 · 102 阅读 · 0 评论 -
2019-02-13 最短路应用
传递闭包:传递闭包就是求有向图中两点的可达性。若从x可以到y,则ok[x][y]=1,否则ok[i][j]=0,然后利用近似Floyd的方法求解核心代码:for(int k=1;k&amp;amp;lt;=n;k++) for(int i=1;i&amp;amp;lt;=n;i++) for(int j=1;j&amp;amp;lt;=n;j++) ok[i][j]|=(ok[i][k]&amp;amp;amp;ok[k][原创 2019-02-13 14:52:57 · 264 阅读 · 0 评论 -
2019-2-12 最短路径算法
Dijkstra+Heap优化:可AC这道题还有这道题//时间复杂度:O(n*log2n)#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int maxn=1000000+10,inf=2147483647;int w[maxn],to[maxn],beg[maxn],nex[maxn],d[maxn],p[maxn];...原创 2019-02-12 15:03:43 · 214 阅读 · 0 评论 -
2018-10-02拓扑排序
拓扑排序:大学-高中阶段自由选课在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:1.每个顶点出现且只出现一次。2.若存在一条从顶点 A 到顶点 B ,则A为B的前序 。Tips:有向无环图才有拓扑排序。入度:有几条边与它相连一.邻接矩阵来做#in...原创 2018-10-02 19:58:25 · 151 阅读 · 0 评论 -
题解 UVA543 【Goldbach's Conjecture】
素数筛法,就是在原暴力求解素数代码的基础上,将算法变成线性的。 那么,怎么操作呢??!!代码:#include <bits/stdc++.h>using namespace std;int n,w,ans[1000010],tot,s;bool vis[100000010];int main(){ cin>>n>>w; for(int...原创 2018-10-03 21:01:11 · 113 阅读 · 0 评论 -
分治算法-----二分求最大最小
例题1:给n个实数,求它们之中最大值和最小值,要求比较次数尽量小。思路:用递归调用函数,在函数里做出以下判断:1 若left==right(只有一个数) max和min都为这个数2 若left==right-1(只有两个数) max为较大的,min为较小的3 除以上两种以外 首先定义中间值d,在递归调用left到d与d+1到right的函数,max为两函数返回值的最大值,min为最小值核...原创 2018-10-03 21:07:18 · 247 阅读 · 0 评论 -
栈
今天我们学了栈,栈是一先进后出,后进先出:老师讲了一道例题,后缀表达式:后缀表示法也叫逆波兰表示法(前缀就是波兰表示法),由于所有的操作符都在操作数的后面,所以被称为后缀表示法。中缀表示法的操作符在操作数之间,也是最符合人的逻辑。前缀表示法的操作符在操作数之前,它和后缀表示法一样,都是为了方便计算机计算,因为在后缀或前缀中没有括号,也不存在优先级处理的问题,直接利用栈进行计算。思路:现将最...原创 2018-10-03 21:09:32 · 101 阅读 · 0 评论 -
堆排序
堆排序是源于树的,在此之前,我们要理解堆,堆相当与森林(许多树),且堆必为完全树#include <bits/stdc++.h>using namespace std;const int maxn=100000+5;//n的最大长度int a[maxn],len;int main(){ int n,k; cin>>n; for(int i=...原创 2018-10-03 21:10:31 · 86 阅读 · 0 评论 -
【题解】A+B problem
题目描述输入两个整数a,b,输出它们的和(|a|,|b|&lt;=10^9)。注意pascal使用integer会爆掉哦!有负数哦!c/c++的main函数必须是int类型,而且最后要return 0。这不仅对洛谷其他题目有效,而且也是noip/noi比赛的要求!好吧,同志们,我们就从这一题开始,向着大牛的路进发。任何一个伟大的思想,都有一个微不足道的开始。输入输出格式输入格...原创 2018-10-04 15:00:48 · 214 阅读 · 0 评论 -
匈牙利算法2018-10-14
看到这一题或者这个优秀Blog其实,这一道题起源于俄罗斯网站上的一道舞会题·······不管这么多,先看一看题目:【模板】二分图匹配题目背景二分图感谢@一扶苏一 提供的hack数据题目描述给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数输入输出格式输入格式:第一行,n,m,e第二至e+1行,每行两个正整数u,v,表示u,v有一条连边输出格式:共一...原创 2018-10-14 21:01:18 · 144 阅读 · 0 评论 -
欧几里得算法 2018-10-18
欧几里得算法就是辗转相除。欧几里得算法和辗转相除法都是求两数最小公倍数的算法。所以,欧几里得算法(辗转相除法)的重要代码如下:int gcd(int x,int y){ if(y==0) return x; else return gcd(y,x%y);}欧几里得算法:可以求出两个数的最大公因数那么,是否可以满足不定方程ax+by=gcd(a,b)???这就需要用到...原创 2018-10-18 19:51:11 · 163 阅读 · 0 评论 -
【题解】【模板】快速排序
luogu P1177 【模板】快速排序题目描述利用快速排序算法将读入的NN个数从小到大排序后输出。快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)输入输出格式输入格式:第1行为一个正整数N,第2行包含N个空格隔开的正整...原创 2018-10-09 22:14:44 · 147 阅读 · 0 评论 -
队列 2018-12-9
队列的特征是先进先出。一般用f(first)表示队首,用l(last)表示队尾,然后进行操作两种方法:1.STL法:#include &amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;gt;using namespace std;queue &amp;amp;amp;lt;int&amp;amp;amp;gt; q;int n;int main(){ scanf(&amp;am原创 2018-12-09 19:34:57 · 111 阅读 · 0 评论 -
spfa
#include &lt;bits/stdc++.h&gt;using namespace std;const int maxn=10000+10,inf=2147483647;int n,m,s,tot,dis[maxn],head[maxn];bool vis[maxn];struct Edge{ int next,to,w;}h[maxn];void add(int u,in...原创 2018-12-10 22:31:32 · 86 阅读 · 0 评论 -
2018-12-23 树
数组模拟堆进行快速排序:#include &lt;bits/stdc++.h&gt;using namespace std;const int maxn=100000+10;int a[maxn],len,n,k;int main(){ scanf("%d",&amp;n); for(int i=1;i&lt;=n;i++){ scanf("%d",&am原创 2018-12-23 20:01:12 · 110 阅读 · 0 评论 -
2018-12-30 树状数组
这一题代码:#include&lt;bits/stdc++.h&gt;using namespace std;const int maxn=500000+5;int c[maxn],n,m;int szsh(int x){ return x &amp; -x;}void add(int i,int x){ while(i&lt;=n){ c[i]+=...原创 2018-12-30 20:19:15 · 109 阅读 · 0 评论 -
树的重心
#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;vector&gt;using namespace std;const int maxn=50000+5,inf=100000000;int sum[maxn];vector &lt;int&gt; a[maxn];int zx,ans,n;void原创 2019-02-12 15:04:29 · 121 阅读 · 0 评论 -
Tarijan
牛的舞会#include &amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;gt;using namespace std;const int N=10001,M=100010; int n,m,ans,head[N],pos,a,b;stack&amp;amp;amp;lt;int&amp;amp;amp;gt;S;struct edge{//结构体,存储编号与下一个 int to,next;原创 2019-02-15 14:59:26 · 135 阅读 · 0 评论 -
并查集&&单源最短路
并查集:#include &lt;bits/stdc++.h&gt;using namespace std;const int maxn=10000+10;int fa[maxn];int find(int x){ if(fa[x]==x) return x; else return fa[x]=find(fa[x]);}int main(){ int n,m...原创 2018-09-24 08:47:36 · 276 阅读 · 0 评论