
ACM——知识点
懵懂记忆
这个作者很懒,什么都没留下…
展开
-
扩展欧几里德算法
在学习扩展欧几里德算法之前,先来回顾一下欧几里德算法。欧几里德算法又称辗转相除法,它是用来求两个数的最大公约数其依赖于一个定理:gcd(a,b) = gcd(b,a%b);欧几里德算法:void gcd(int a,int b){ return b?gcd(b,a%b):a;}扩展欧几里德算法是用来在已知a,b求解一组x,y使得a*x+b*y=gcd(a,b)(根据数论中不定方程解原创 2014-12-13 12:21:07 · 396 阅读 · 0 评论 -
母函数详解
母函数(Generating function)详解在数学中,某个序列的母函数是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。母函数可分为很多种,包括普通母函数、指数母函数、L级数、贝尔级数和狄利克雷级数。对每个序列都可以写出以上每个类型的一个母函数。构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数视乎序列本身转载 2014-12-12 10:48:46 · 511 阅读 · 0 评论 -
并查集详解
通过find函数找出该节点的根节点,通过UNION函数将两棵树合并。加入rank[N]来记录每个节点的秩(即树的高度),并按秩进行合并,可避免合并时的最糟糕情况,(树形为一条直线)通过路径压缩可以减少每次寻找根节点的次数。下面通过HDU1232(畅通工程)来进行分析:Code#include #include #include using namespace std;转载 2015-03-29 19:25:18 · 365 阅读 · 0 评论 -
Kruskal算法详解
克鲁斯卡尔(Kruskal)算法(只与边相关)算法描述:克鲁斯卡尔算法需要对图的边进行访问,所以克鲁斯卡尔算法的时间复杂度只和边又关系,可以证明其时间复杂度为O(eloge)。算法过程:1.将图各边按照权值进行排序2.将图遍历一次,找出权值最小的边,(条件:此次找出的边不能和已加入最小生成树集合的边构成环),若符合条件,则加入最小生成树的集合中。不符合条转载 2015-03-29 15:52:52 · 1297 阅读 · 0 评论 -
Dijkstra算法详解
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设转载 2015-03-29 15:55:57 · 888 阅读 · 0 评论 -
UESTC 838 —— 母仪天下(树状数组模板)
树状数组:1、Add(x,d):让A[x]增加d 2、query(L,R):计算区间[L,R]中所有元素的和Code:#include #include using namespace std;int C[100010],n;int lowbit(int &x){ return x&(-x);}int sum(int x){ int ret =原创 2015-04-01 22:59:33 · 515 阅读 · 0 评论 -
UESTC 839——东风不与周郎便(线段树区间修改模板)
解题思路:线段树区间修改,详见代码。Code:#include #include using namespace std;typedef long long LL;#define MAX 110000LL n,m;LL _Sum,_Max,_Min;struct Tree{ LL L,R; LL Sum,add,Min,Max;}trees[MAX*3];vo原创 2015-04-01 20:36:20 · 1017 阅读 · 0 评论