----------ACM算法总结
mfcheer
他不停地跑啊跑 就为了追上那个曾经被寄予厚望的自己
展开
-
匈牙利算法
匈牙利算法用于二分图的最大匹配,核心问题就是找增广路径。匈牙利算法的时间复杂度为O(VE),其中V为二分图左边的顶点数,E为二分图中边的数目。增广路性质:(1)有奇数条边。 (2)起点在二分图的左半边,终点在右半边。 (3)路径上的点一定是一个在左半边,一个在右半边,交替出现。 (4)整条路径上没有重复的点。 (5)起点和终点都是目前还没有配对的点,而其它所有点都是已经配好对的。 (6)路原创 2015-06-14 14:51:27 · 2083 阅读 · 0 评论 -
小Z的袜子【莫队算法】
[2009国家集训队]小Z的袜子(hose)Time Limit: 20 Sec Memory Limit: 259 MB Submit: 5259 Solved: 2426 [Submit][Status][Discuss] Description作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听原创 2016-01-28 02:39:07 · 631 阅读 · 0 评论 -
bellman_ford 模板
const int INF = 0x3f3f3f3f;const int MAXN = 550;int dis[MAXN];struct Edge{ int u, v, cost; Edge(int _u = 0, int _v = 0, int _cost = 0) :u (_u),v(_v), cost(_cost){};};vector<Edge> E;bool bell原创 2015-11-20 12:25:21 · 339 阅读 · 0 评论 -
二分图多重匹配问题
转自:http://www.cppblog.com/MatoNo1/archive/2011/03/26/142766.html在二分图最大匹配中,每个点(不管是X方点还是Y方点)最多只能和一条匹配边相关联,然而,我们经常遇到这种问题,即二分图匹配中一个点可以和多条匹配边相关联,但有上限,或者说,Li表示点i最多可以和多少条匹配边相关联。二分图多重匹配分为二分图多重最大匹配与二分图多重最优匹配两种,原创 2015-09-09 18:00:06 · 1052 阅读 · 0 评论 -
容斥原理
百度百科:在计数时,必须注意无一重复,无一遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。两个集合的容斥关系公式:A∪B = A+B – A∩B (∩:重合的部分) 三个集合的容斥关系公式:A∪B∪C原创 2015-06-05 23:30:30 · 1075 阅读 · 0 评论 -
判断互质数的方法
一、概念判断法 公约数只有1的两个数叫做互质的数。根据互质数的概念。可以对一组数进行判断。如,4和9的公约数只有1,所以它们是互质数。 二、规律判断法 根据互质数的定义,可总结出一些规律,利用这些规律可迅速判断一组数是否互质。 (1)两个不相同的质数一定是互质数。例如,19和13是互质数。 (2)两个连续的自然数一定原创 2014-10-25 01:58:28 · 6569 阅读 · 0 评论 -
中国剩余定理
前面许多人讲过一些性质与证明,我来讲一讲解法,也是为了以后自己回过头来看。 中国剩余定理介绍 在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。具体解法分三步:找出三个数:从3和5的公倍数中找出被7除余1的最小数15,从3和7的公倍原创 2015-06-05 23:34:19 · 474 阅读 · 0 评论 -
欧拉函数及其性质
对正整数n,欧拉函数是 例如euler(8)=4,因为1,3,5,7均和8互质。Euler函数表达通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数,x是不为0的整数。euler(1)=1(唯一和1互质的数就是1本身)。 欧拉公式的延伸:一个数的所有质因子之和是euler(n)*n/2原创 2015-03-11 16:27:43 · 1541 阅读 · 0 评论 -
当我真正理解素数线性筛法
参考自:点击链接 主要代码:const int MAXN = 10000010; bool com[MAXN]; int primes, prime[MAXN/10];//数组不必开的太大 void solve(int n) { primes = 0; memset(com,false,sizeof(com)); com[0] = com[1] =原创 2015-03-19 22:21:29 · 3200 阅读 · 0 评论 -
逆元
数论中的逆元定义为: 设m是一个整数,a是满足(a,m)= 1 的整数,则存在唯一的整数a#,1<=a#<m, 使得 a *a# = 1( mod m); a#称为a的逆元; 求逆元的方法,可以用扩展欧几里得算法; sa+tm=(a,m)=1; 因此整数a#满足a# mod m=s满足a*a# = 1(mod m); 代码:long long ext_gcd(long long a,l原创 2015-06-05 23:32:21 · 511 阅读 · 2 评论 -
数位DP模板
通常的数位dp可以写成如下形式:int dfs(int i, int s, bool e) { if (i==-1) return s==target_s; if (!e && ~f[i][s]) return f[i][s]; int res = 0; int u = e?num[i]:9; for (int d = first?1:0; d <= u; +转载 2015-07-27 16:17:21 · 473 阅读 · 0 评论 -
ACM小技巧
1.一般用C语言节约空间,要用C++库函数或STL时才用C++;cout、cin和printf、scanf最好不要混用。大数据输入输出时最好不要用cin、cout,防止超时。2.有时候int型不够用,可以用long long或__int64型(两个下划线__)。值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(转载 2014-11-02 20:51:32 · 527 阅读 · 0 评论 -
输入输出外挂
遇到卡时间比较死的题目的时候可以用#include #include #include #include #include using namespace std;//适用于正负整形数template inline bool scan_d(T &ret) { char c; int sgn; if (c = getchar(), c == EOF) return 0原创 2015-03-15 21:31:08 · 691 阅读 · 0 评论 -
A*算法
A* 是寻路算法的一种。启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置 进行搜索直到目标。这样可以省略大量无畏的搜索路径,提到了效率。在启发式搜索中,对位置的估价是 十分重要的。采用了不同的估价可以有不同的效果。通过公式 F=G+H 来计算.F = G + HG 表示从起点 A 移动到网格上指定方格的移动耗费 (可沿斜方向移动).H 表示从原创 2014-11-17 00:02:53 · 473 阅读 · 0 评论