2017
fcdljh
这个作者很懒,什么都没留下…
展开
-
最小生成树学习
MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法, ①Prim算法 ②Kruskal算法(一)Prim算法【算法理解】 它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的...转载 2018-03-21 10:09:39 · 195 阅读 · 0 评论 -
线段树总结
综述: 线段树可谓解决区间问题的神兵利器,其稳定的O(n*log(n))的优秀时间复杂度适应了OI和ACM竞赛的一般需求,而且代码简介,功能丰富,使用灵活。经过一段时间对线段树由浅入深的了解,笔者越发感受到这个数据结构的强大魅力。虽然有关介绍线段树的文章很多,其中不乏优秀作品,但是毕竟再好看也是别人的东西,只有消化吸收了才能为己所用。所以,笔者还是决定自己写一份关于线段树的总结,可...转载 2018-03-21 09:52:35 · 128 阅读 · 0 评论 -
二分图最大匹配——匈牙利算法
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。-------等等,看得头大?那么请看下面的版本:通过数代人的努力,你终于赶上了剩男剩女的大潮,假设你是一位光荣的新世纪媒人,在你的手上有N个剩男,M个剩女,每个人都可能对多名异性有好感...转载 2018-03-21 09:47:02 · 138 阅读 · 0 评论 -
tarjan算法学习
“tarjan陪伴强联通分量生成树完成后思路才闪光欧拉跑过的七桥古塘让你 心驰神往”----《膜你抄》一、tarjan求强连通分量1、什么是强连通分量?“有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个...转载 2018-03-21 09:44:22 · 168 阅读 · 0 评论 -
扩展欧几里得
定义:扩展欧几里得算法是用于解决一类形如求解a*x+b*y=c中(x,y),或者形如a*x≡b(mod c)中x的问题。引理(裴蜀定理):不定方程a*x+b*y=gcd(a,b)(x,y为变量)一定有无数个解。证明:先证明该方程有解。将欧几里得算法倒推上去。因为欧几里得算法总会结束,所以方程一定有解。设a=b*p+q(0<=q<b),则gcd(a,b)=gcd(b,q)。设b*x'+q...原创 2018-03-21 09:32:11 · 155 阅读 · 0 评论 -
KMP算法学习
【算法理解】 这个程序的算法是相当“朴素”的:变量k是在字符串s中搜索t的起点,用指针i与j分别在s与t中扫描,逐一比较s[i]与t[j]是否相同。若遇到不相同的情况,则将起点k在s中后移一个字符,继续搜索。客观地讲,在两个字符串都不很长的情况下,这个算法的执行效率还是可以的。 但在某些特殊情况下,这个算法的效率问题就会显现出来,它最大的问题就在于:当出现s[i]...原创 2018-03-21 09:22:36 · 103 阅读 · 0 评论 -
最短路径学习
【1】SPFA算法void spfa(){ memset(vis,0,sizeof(vis)); memset(dis,120,sizeof(dis)); queue<int>q; q.push(s); dis[s]=0,vis[s]=true; while(!q.empty()){ int u=q.front(); ...原创 2018-03-21 10:26:57 · 288 阅读 · 0 评论