- 博客(69)
- 收藏
- 关注
转载 关节点
定义在连通图 G 中,如果删除顶点 u 及从 u 出发的所有边后所得的子图不连通,我们就称顶点 u 为图 G 的关节点或连接点。原理 要解决这道题,我们可以检查图在单独删除各顶点之后的连通性,但这个算法要对每个顶点执行一次DFS, 效率不高。 不过,只要我们如下将DFS加以应用,就可以有效地找出图 G 中所有的关节点了。 在一次DFS中求以下变量值。 ????...
2019-09-27 23:22:00
826
转载 SPFA算法
定义SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。原理动态逼近法: ① 设立一个队列用来保存待优化的结点。 ② 优化时每次取出队首结点 u,并且用 u 点当前的最短路径估计值对 u 点所指向的结点 v 进行松弛操作,如果 v 点的最短路径估计值有所调整,且 v 点不在当前的队列中,就将 v 点...
2019-09-27 13:24:00
186
转载 Floyd算法 (弗洛伊德)
定义弗洛伊德最短距离算法(Floyd Shortest Path Algorithm)又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。原理我们的目标是寻找从点 i 到点 j 的最短路径。 从任意节点 i 到任意节点 j 的最短路径不外乎2种可能。 ①直接从 i 到 j。 ②从 i 经过若干个节点 k 到 j。 令...
2019-09-26 01:10:00
417
转载 Dijkstra算法 (迪杰斯特拉)
定义 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。原理 设图 G=(V,E) 所有顶点的集合为 V,起点为 S,最短路径树中包含的顶点集合为 S。在各计算步骤中,我们将选出最短路径树的边和顶点并将其添加至S。 对于各顶点 i,设仅经由S内的顶点的 s ...
2019-09-25 21:40:00
310
转载 Prim算法 (普里姆)
定义普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。原理设图 G = (V,E)所有顶点的集合为V,MST中顶点的集合为T。① 从G中选取任意顶点作为MST的根,将其添加至T。② 循环执行下述处理直至T=V 在连接T内顶点与V-T内顶点的边中选取权值最小的边 (),将其作为MST的边,并将 u 添至T。实现代...
2019-09-24 14:49:00
134
转载 Kruskal算法 (克鲁斯卡尔)
定义Kruskal算法是一种用来查找最小生成树的算法。准备树:如果一个无向连通图中不存在回路,则这种图称为树。生成树 :无向连通图G的一个子图如果是一颗包含G的所有顶点的树,则该子图称为G的生成树。生成树是连通图的极小连通子图。这里所谓极小是指:若在树中任意增加一条边,则将出现一条回路;若去掉一条边,将会使之变成非连通图。最小生成树:对无向连通图的生成树,各边的权...
2019-09-24 00:53:00
270
转载 拓扑排序
定义在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。该序列必须满足下面两个条件:① 每个顶点出现且只出现一次。② 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。实现AOV网定义AOV网(Activ...
2019-09-18 21:56:00
156
转载 全排列 & 康托展开
去重全排列#include<bits/stdc++.h> using namespace std; int num[100],cnt;void fun(int pos,int n);int judge(int l,int r);int main() { int i,n; scanf("%d",&n); for...
2019-09-11 14:13:00
169
转载 前缀和 & 差分
前缀和一维令,则int main(){ int n,m,sum[maxn],a[maxn],l,r; sum[0]=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i]...
2019-09-10 15:15:00
104
转载 权值线段树
定义线段树学习权值线段树和线段树类似,只是维护的数据不一样而已。权值线段树的叶节点维护的是数据出现的次数。为了防止数据过大,一般先离散化数据再使用权值线段树维护。主席树的前置技能为权值线段树。权值线段树可以解决: ①插入x数 ②删除x数(若有多个相同的数,因只删除一个)...
2019-09-07 23:25:00
92
转载 逆序对
定义设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同。 如果存在正整数 i, j 使得 1 ≤ i < j ≤ n 而且 A[i] > A[j],则 <A[i], A[j]> 这个有序对称为 A 的一个逆序对,也称作逆序数。实现归并排序在归并排序中,利用cnt计数即可。void mergeArray(int ...
2019-09-06 23:40:00
212
转载 快速排序
定义 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。原理快速排序算法通过多次比较和交换来实现排序,其排序流程如下:(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。 (2)将大于或等于分界值的数据集中到...
2019-09-05 23:28:00
82
转载 归并排序
定义 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。原理第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列。第...
2019-09-05 22:33:00
143
转载 中国剩余定理 & ex
中国剩余定理引入 在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。具体解法分下面三步:① 找出三个数:从3和5的公倍数中找出被7除余1的最小数15,从3和7的公倍数中找出被5除余1 的最小数21,最后从5...
2019-09-05 15:20:00
161
转载 BSGS & exBSGS
BSGSBSGS 用于当gcd(A,p)=1时,求方程的解。由费马定理可知,当gcd(A,p)=1,且p为素数时,有,所以得到。令,x=am-b,,,得到,。通过枚举用hash维护任意一侧,再枚举另一侧,判断是否在hash,若在则答案为am-b。例:poj 2417Discrete Logging#include<iostream>#i...
2019-09-03 14:15:00
90
转载 逆元
意义若有,则x为a在模p下的逆元。一个分数是不能直接模运算的,但是可以进行乘法运算实现欧拉定理由欧拉定理得,若gcd(a,p)=1,则得到,所以,为a在模p下的逆元。费马小定理对于质数p,若gcd(a,p)=1,则得到,是a在模p下的逆元,直接快速幂求解即可。扩展欧几里得由,可以得到,所以,,用扩欧求x,y即可。阶乘逆元...
2019-08-28 19:24:00
98
转载 树状数组
定义 树状数组或者二叉索引树也称作Binary Indexed Tree,又叫做Fenwick树。 它的查询和修改的时间复杂度都是log(n),空间复杂度则为O(n). 树状数组可以将线性结构转化成树状结构,从而进行跳跃式扫描,通常使用在高效的计算数列的前缀和,区间和。实现通过图片可以直接得到: sum1 = A1 sum2 = A1+A2 sum3...
2019-08-28 13:24:00
76
转载 线段树
定义 线段树是一种二叉搜索树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于每一个子节点而言,都表示整个序列中的一段子区间; 对于每个叶子节点而言,都表示序列中的单个元素信息;子节点不断向自己的父亲节点传递信息,而父节点存储的信息则是他的每一个子节点信息的整合。 线段树维护的问题必须满足区间加法。(一个问题满足区间加法,仅当对于区间[L,R]的问题...
2019-08-27 16:05:00
82
转载 马拉车(Manachar)——最长回文串
定义: Manachar算法主要是处理字符串中关于回文串的问题的,它可以在 O(n) 的时间处理出以字符串中每一个字符为中心的回文串半径,由于将原字符串处理成两倍长度的新串,在每两个字符之间加入一个特定的特殊字符,因此原本长度为偶数的回文串就成了以中间特殊字符为中心的奇数长度的回文串了。 Manacher算法提供了一种巧妙的办法,将长度为奇数的回文串和长度为偶数的回文串一起考虑,具...
2019-08-27 11:13:00
239
转载 2019牛客暑期多校训练营(第十场) Coffee Chicken
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld题目描述Dr. JYY has just created the Coffee Chicken strings, denoted as S(n). They are quite si...
2019-08-26 10:12:00
164
转载 折半枚举
折半枚举 折半枚举是一种很好用的枚举方法,比如有时集合过大无法全部搜索,但刚好只需要他们的和或其他可以处理出的东西,就可以一半一半搜。练习poj 27854 Values whose Sum is 0#include<iostream>#include<cstdio>#include<algorithm>using ...
2019-08-25 15:16:00
140
转载 2019牛客暑期多校训练营(第九场) Knapsack Cryptosystem
时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld题目描述 Amy asks Mr. B problem D. Please help Mr. B to solve the following problem. Am...
2019-08-25 13:42:00
96
转载 最大公约数&最小公倍数
最大公约数最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。最小公倍数两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。性质 gcd(a,b)=gcd(b,a) gcd(-a,b)=gcd(a,b) gcd(a,a)=|a| ...
2019-08-23 16:26:00
144
转载 扩展欧几里德|模线性方程
定义对于不完全为0的整数a,b,gcd(a,b)表示a,b的最大公约数。那么一定存在整数x,y 使得gcd(a,b)=ax+by。求解 求一组解x,y,使得 因为欧几里得定理,可以得到 令x',y'为变量,得 所以 因为 所以 整理 得到由最后的表达式可以看出,我们可以通过递归进行求...
2019-08-23 15:43:00
133
转载 欧拉函数|降幂
定义 对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。例如φ(8)=4,因为1,3,5,7均和8互质。内容 通式: 其中p1, p2……pn为x的所有质因数,x是不为0的整数。性质 ① n的所有质因子之和是φ(n)*n/2...
2019-08-22 17:32:00
415
转载 素数筛选
经典:int isprime(int n){ int i; if(n<=1) return 0; for(i=2;i<=sqrt(n);i++) if(n%i==0) return 0; return 1;}显然如果要判断一定范围内的素数,这种算法很慢。埃拉托斯特尼(Eratosthenes)筛法int f...
2019-08-21 19:48:00
75
转载 poj 2689 Prime Distance
Prime DistanceTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 29401 Accepted: 7556DescriptionThe branch of mathematics called number theory is about properties of numbers. One...
2019-08-21 19:31:00
71
转载 2019牛客暑期多校训练营(第三场) Planting Trees
时间限制:C/C++ 3秒,其他语言6秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld题目描述 The semester is finally over and the summer holiday is coming. However, as part of your university's...
2019-08-20 17:23:00
108
转载 单调栈&单调队列
单调栈定义: 单调栈是指一个栈内部的元素是具有严格单调性的一种数据结构,分为单调递增栈和单调递减栈。性质: ① 满足从栈顶到栈底元素具有严格的单调性。 ② 满足栈的后进先出特性,越靠近栈底的元素越早进栈。单调队列定义: 单调队列是指一个队列内部的元素具有严格单调性的一种数据结构,分为单调递增队列和单调递减队列。性质: ① 单调队列必须满足从...
2019-08-20 17:00:00
163
转载 尺取法
定义: 尺取法:尺取法是一种比较基础的算法,一般用来解决具有单调性的区间问题。尺取法通常是根据实际情况不断地推进区间左右端点以得出答案。尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以说尺取法是一种高效的枚举区间的方法,是一种技巧,一般用于求取有一定限制的区间个数或最短的区间等等。 使用尺取法时应注意以下几点:① 尺取法的应用范围?② 区间的端点合适以及如何推...
2019-08-17 20:40:00
153
转载 poj 2566 Bound Found
Bound FoundTime Limit: 5000MS Memory Limit: 65536KTotal Submissions: 7891 Accepted: 2572 Special JudgeDescriptionSignals of most probably extra-terrestrial origin have been received and d...
2019-08-17 19:24:00
80
转载 poj 1787 Charlie's Change
Charlie's ChangeTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 5731 Accepted: 1849DescriptionCharlie is a driver of Advanced Cargo Movement, Ltd. Charlie drives a lot and s...
2019-08-16 23:24:00
70
转载 背包路径
以UVA 624 CD为例,题为简单的01背包,重点看路径的记录部分。代码1:#include<iostream>#include<algorithm>#include<cstdio>#include<vector>using namespace std;const int maxn=100010;...
2019-08-16 22:29:00
123
转载 背包
01背包定义: 有N件物品和一个容量为V的背包。每种物品只有一件,选或者不选,第i件物品的体积是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大。实现: 令dp[i][j]表示选择前i件物品,背包体积为j时的最大价值。 因为01背包中每件物品只有选和不选两种状态,所以状态方程比较容易实现: ①如果...
2019-08-16 13:27:00
95
转载 hdu 3033 I love sneakers!
I love sneakers!Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8105Accepted Submission(s): 3216Problem DescriptionAfter months o...
2019-08-15 19:37:00
118
转载 poj 1742 Coins
CoinsTime Limit: 3000MS Memory Limit: 30000KTotal Submissions: 48194 Accepted: 16209Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silver...
2019-08-15 18:26:00
215
转载 poj 1276 Cash Machine
Cash MachineTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 45189 Accepted: 16490DescriptionA Bank plans to install a machine for cash withdrawal. The machine is able to del...
2019-08-15 16:50:00
165
转载 hdu 1114 Piggy-Bank
Piggy-BankTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 42454Accepted Submission(s): 20929Problem DescriptionBefore ACM can do ...
2019-08-14 19:53:00
67
转载 poj 1293 Duty Free Shop
Duty Free ShopTime Limit:1000MSMemory Limit:10000KTotal Submissions:1896Accepted:730Special JudgeDescriptionPedro travelled to Europe to take part i...
2019-08-14 19:44:00
187
转载 hdu 1203 I NEED A OFFER!
I NEED A OFFER!Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 40569Accepted Submission(s): 16121Problem DescriptionSpeakless很早就想...
2019-08-14 19:33:00
76
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人