模板
文章平均质量分 90
千杯湖底沙.
退役了。
OI就到此为止吧。
呃我又回来了
展开
-
[模版] 归并排序
引子原理模板代码例题逆序对分析题解代码GG引子归并排序是分治算法中一个很重要的应用。它的思想就是把一个序列尽量分成相等长度的两个子序列,一直分到子序列长度为1。然后再两两按顺序合并,最后得到的序列也是有序的。这种排序手段时间复杂度是O(nlogn),而且是一种稳定的排序方法。相等元素的顺序不会发生改变。。。原理原理也不瞎扯了,假设我们要合并这两个已经有序的子序列: 2 4 6 8原创 2017-10-09 18:49:10 · 752 阅读 · 4 评论 -
NOIP2000 方格取数(动态规划 详细解答)
这里我们按照一定的流程来做也就是把思维过程一步步写下来很多DP题都可以按照这个思维来做题目描述设有N∗NN∗NN*N的方格图(N<=9N<=9N000。如下图所示(见样例):A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0...原创 2018-03-24 16:19:40 · 1061 阅读 · 0 评论 -
数论——Baby Step Giant Step大步小步算法
bsgs算法Baby Step Giant Step算法,简称BSGS算法,也称为大步小步算法.解决对象离散对数:当x≡Gk(modm)x≡Gk(modm)x\equiv G^k\pmod m时,logG(x)≡k(modϕ(m))logG(x)≡k(modϕ(m))log_G(x)\equiv k\pmod{\phi(m)}。此处的logG(x)logG(x)log_G(x)是x...原创 2017-12-19 19:42:42 · 3866 阅读 · 0 评论 -
最大流算法之二——Dinic算法
Dinic是优化的EKDinic算法的流程是,每次寻找可行流路径的时候都先通过一次bfs给原网络分层(如果不能分层,那么已经是最大流网络了),再通过dfs给分层后的网络找可行流路径(这时候不是仅仅找一条,二十一次dfs可以找许多条可行流)。 (图片来源:https://www.cnblogs.com/LUO77/p/6115057.html)这里六张图是在若干次寻找增广路之后的中间形态。...原创 2018-07-08 14:59:56 · 441 阅读 · 0 评论 -
最大流算法之三——Dinic算法的优化——当前弧优化
当前弧优化我们通过上一篇博客 传送门 知道,每一次bfs之后都跟着若干次dfs。每一次dfs都会发现一条可行流,而且这个可行流肯定是该路径的最大可行流。所以我们对于一条路径进行增广之后,肯定不用进行第二次增广。 所以我们这里加了一个优化,在同一个 bfs分层后跟着的dfs里面,加入要 遍历编号为1、3、5、7、9的五条边,我们默认cur[i]=1cur[i]=1cur[i]=1,然后...原创 2018-07-08 15:19:29 · 1624 阅读 · 0 评论 -
【网络流24题之一】飞行员配对问题+求方案(网络流dinic算法求二分图最大匹配)
题面题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。如何选择配对飞行的飞行员才能使一次派出最多的飞机。对于给定的外籍飞行员与英国飞行员的配合情况,试设计一...原创 2018-07-09 21:24:48 · 478 阅读 · 0 评论 -
【网络流24题之一】飞行员配对问题+求方案(匈牙利算法求二分图最大匹配)
题面题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。如何选择配对飞行的飞行员才能使一次派出最多的飞机。对于给定的外籍飞行员与英国飞行员的配合情况,试设计一...原创 2018-07-10 21:18:34 · 315 阅读 · 0 评论 -
bzoj1218 [HNOI2003]激光炸弹
题面题解从学考回归oi第二题。。 复习二维前缀和。#include&lt;bits/stdc++.h&gt;using namespace std;inline int read(){ int num=0;char c=' ';bool flag=true; for(;c&gt;'9'||c&lt;'0';c=getchar()) if...原创 2018-07-07 10:01:52 · 496 阅读 · 0 评论 -
最大流算法之一——EK算法
EK算法流程EK算法的流程很简单:随意找一个可行流作为流量网络更新的基础(一般题目没有规定可以采用流量为0的可行流)利用bfsbfsbfs找一条从源点到汇点的可行流路径用新找到的可行流路径更新原有流量网络:先找到该可行流路径中流量最小边,然后将该路径上所有正向边都减去该最小边的流量,反向边都加上该最小边的流量(想想,为什么要设反向边)不断重复2和3两个步骤,直到在第2步的时候找不到...原创 2018-07-07 16:14:00 · 3408 阅读 · 0 评论 -
费用流模板——EK+SPFA实现的最小费用最大流
算法原理用两个字的高度概括——贪心~ 用一句话的概括:每一次通过spfa找到花费最小的可行流,然后进行增广,直到残量网络中,源点不能达到汇点。 其实还是通过代码理解比较好。code这里1是源点,n是汇点。 每次的读入四个数:有向边的两个结点+容量+费用#include<bits/stdc++.h>using namespace std;inline i...原创 2018-07-21 09:54:12 · 703 阅读 · 0 评论 -
Tarjan算法——割点与割边
tarjan算法中的一些要素dfn[i]代表时间戳,是访问该节点的时间。low[i]代表追溯值。是该节点以及它的子树通过非搜索树边能追溯的dfn值最小的祖先的dfn值。割点割点的概念就是:在一张无向图中,去掉某一个点,这个图将会分裂成多个连通子图。我们知道一个点不是割点,当前仅当这个点在至少一个简单环上。 我们还可以知道,不在搜索树上的边一定是一个点连到它的祖先的。而不是连到...原创 2018-08-10 21:20:55 · 1468 阅读 · 0 评论 -
[模板]KMP算法
KMP算法简介KMP算法简介什么是KMP算法??? KMP算法是由分别姓K/M/P的三个人提出来的。这个算法主要应用于字符串之间的匹配用的。有人会说:字符串匹配??string类型不是有个成员函数find呢?咳咳,我先要说明的是,c++std里面自带的库函数肯定都是时间复杂度超级高的,如果真的有逆天的函数,时间复杂度很优秀的库函数,CCF是不让用的,比如CCF已经禁用了所有以原创 2017-10-13 13:17:20 · 282 阅读 · 0 评论 -
[模板]最小生成树 prim算法
最小生成树的环属性——prim的算法原理我们知道,对于一棵有n个节点的树,它会有n-1条边,只要任意连接两个节点,肯定会出现一个环。在环中删掉一条边后,又可以得到一棵树。我们可以发现:一棵生成树上,增加一条边e,再删除e所在环上的最大边,会得到另一棵“更小”的生成树(如果e不是最大边)。实现手段:剪切属性在图中,剪切将顶点划分成两个不相交集合。交叉边为这些顶点在两个不同集合的边。对于任何一个剪切,各原创 2017-10-10 19:37:09 · 493 阅读 · 0 评论 -
[模板]二叉树后序遍历
已知某二叉树的中序遍历和先序遍历,求该二叉树的后序遍历。#include<bits/stdc++.h>using namespace std;inline int read(){ int num=0; bool flag=true; char c; for(;c>'9'||c<'0';c=getchar()) if(c=='-') flag=fa原创 2017-11-09 15:56:40 · 234 阅读 · 0 评论 -
[模版]并查集
并查集是什么概念并查集是个啥呀?并查集,并,查,集。合并,查找,集合。就是这样,并查集就是可以合并查找两种操作的集合。从树的角度看,并查集就是个森林,每一棵树代表一个集合。我们要干的事情就是对于一个森林集合进行合并、或者查找。如何实现我们如何实现判断两个元素是否在一个集合里面呢?我们知道,在同一棵树里面的所有点,都有一个共同的祖先——根结点。ok,我们只要求出两个元素的根结点, 就可以判断这两个点是原创 2017-09-16 13:35:45 · 423 阅读 · 2 评论 -
[模板]埃氏筛法
模板题题目描述 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输出格式 输入格式: 第一行包含两个正整数N、M,分别表示查询的范围和查询的个数。 接下来M行每行包含一个不小于1且不大于N的整数,即询问概数是否为质数。 输出格式: 输出包含M行,每行为Yes或No,即依次为每一个询问的结果。 输入输出样例 输入样例#1: 100 5原创 2017-10-10 19:10:44 · 424 阅读 · 0 评论 -
区间DP
区间DP区间dp就是在一系列的区间中搞特一些子dp,昂。 这玩意儿还得用具体的题目来说。 下面展示一些模型。石子合并题目链接:codevs石子合并分析这道题目跟合并果子很像啊!但是这道题目只能合并相邻的两堆石子。怎么合并的总得分最大呢,就要保证每一次合并后,得分都最大。符合最优性原则,可以用我们神奇的DP做。 这道题目就是典型的一个区间DP。我们可以知道,每一个区间的最优解都是由更小的区间的最原创 2017-10-30 18:15:30 · 276 阅读 · 0 评论 -
[模版]线段树
线段树线段树是个啥呀线段树是个毛???在前面我只能告诉你又长又骚。线段树的代码,板子题都有将近百行,稍微有点思想的题目估计就要上一百五十行了。然后差错的时候哦查到你心累,这就是线段树……算了还是来点正能量的吧。线段树有着不可比拟的有点,它是可以快捷地对一段数据进行在线维护、查询的数据结构,查询和维护的时间复杂度都是(log2 n)这就很舒服了。基本原理线段树是一种二叉搜索树,它将一个区间放在根结点原创 2017-09-24 20:27:06 · 1303 阅读 · 0 评论 -
树状数组
树状数组先给一张树状数组的图片吧,有图有真相。 树状数组就长这样↑,因为看上去像一棵树,所以就叫树状数组了。我们用cc数组来存储aa数组的某些内容,从而优化时间复杂度。如何实现lowbit先来了解一个概念lowbitlowbit。从字面意思上理解:就是最低的二进制位。在树状数组中,这个的意思是:把一个整数化成二进制,最低的“1”表示的数是多少。 例如:如果要求low原创 2018-01-05 18:27:58 · 282 阅读 · 0 评论 -
[模板]用倍增求LCA问题
定义codeGG定义LCA,最近公共祖先,是指一棵树上两个节点的深度最大的公共祖先。也可以理解为两个节点之间的路径上深度最小的点。 我们这里用了倍增的方法求了LCA。 我们的基本的思路就是,用dfs遍历求出所有点的深度。father[i][j]数组用来求的是距离节点i,距离2j2^j的祖先。可以知道,father[i][0]就是它的直接父亲。然后通过倍增的思路求出father数组的所有元素原创 2017-11-04 20:39:08 · 582 阅读 · 0 评论 -
树 DFS序 详解[完全版]
本文是博主通过几篇比较好的博文组合而成。下面是几篇博文的原地址: http://cdnnn.07net01.com/2015/08/899785.html http://blog.csdn.net/ccsu_001/article/details/47667587 http://blog.csdn.net/u012061345/article/details/54023285 http:/转载 2017-11-02 15:06:43 · 23542 阅读 · 12 评论 -
[模板]高精度封装运算
我只是在这备份下……忘记的时候再来看。。#include<bits/stdc++.h>#define maxn 12000using namespace std;char s1[maxn],s2[maxn];namespace Bignum{ struct bignum { int len,num[maxn]; bignum()原创 2017-11-10 09:04:36 · 698 阅读 · 0 评论 -
[模板]乘法逆元
费马小定理适用:求某一个数在模意义下的乘法逆元。 如果a、pa、p互质,那么有ap−aa^p-a就是p的倍数,所以有ap≡a(modp)a^p\equiv a(\mod p),ap−1≡1(modp)a^{p-1} \equiv 1 (\mod p)。所以只要打一个快速幂就ok了。 code#include<bits/stdc++.h>using namespace std;int n,p;原创 2017-11-09 20:36:33 · 315 阅读 · 0 评论 -
[模板]堆和优先队列
大根堆priority_queue<int>a; empty( ) //判断一个队列是否为空 pop( ) //删除队顶元素 push( ) //加入一个元素 size( ) //返回优先队列中拥有的元素个数 top( ) //返回优先队列的队顶元素大根堆和小根堆优先级priority_queue<int,vector<int>,greater<in原创 2017-11-10 10:29:00 · 200 阅读 · 0 评论 -
Tarjan算法——边双和点双
边双连通分量边双连通图:如果一个无向连通图中,没有割边,那么这个无向连通图就是一个边双连通图。一个无向图的极大边双连通子图就是它的其中一个边双连通分量。 我们要解释下这里“极大”的概念:如果一个连通子图G1G1G1是边双,那么不存在一个原图的子图G2G2G2既满足G1∈G2G1∈G2G1\in G2又满足G2是边双G2是边双G2是边双。边双的“极大”不是指整个图范围内的最大,而是所有...原创 2018-08-23 08:37:56 · 6877 阅读 · 0 评论