算法讲解
文章平均质量分 76
阿蒋
啦啦啦
展开
-
算法起步之kmp算法
【作者Idlear 博客:http://blog.csdn.net/idlear/article/details/19555905】 这估计是算法连载文章的最后几篇了,马上就要开学了,以后关于算法的更新肯定没有之前那么快了,一方面是因为算法这几篇作为入门也已经算是可以了,我常记得我以前老师说的一句话就是万事开头难,学习计算机就像武侠小说里面练武功一样,一旦打开任督二脉,练转载 2014-02-24 09:51:58 · 1304 阅读 · 2 评论 -
树套树专题——bzoj 3110: [Zjoi2013] K大数查询 & 3236 [Ahoi2013] 作业 题解
【原题1】3110: [Zjoi2013]K大数查询Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 978 Solved: 476Description有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位原创 2014-05-09 08:30:18 · 5499 阅读 · 0 评论 -
C++运算符重载讲解与经典实例
C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如: class complex { public: complex(double r=0.0,double I=0.0){real=r;imag=I;} void display(); private: double real; dou转载 2014-04-11 08:42:44 · 838 阅读 · 0 评论 -
splay专题复习——bzoj 3224 & 1862 & 1503 题解
【前言】快要省选二试了。上次去被虐出翔了~~这次即便原创 2014-05-17 07:50:16 · 2177 阅读 · 0 评论 -
乘法逆元的扩展欧几里得解法
【序言】正好今天BZOJ崩了(反正我上不去),我总算可以静下心来研究一些东西。乘法逆元已经不陌生了,但是平常不怎么用到(skydec整天做神题肯定很熟练了,ORZ),因此是该好好复习一下。万一我以后忘记了,可以来看看= =。【传送门】参考了几位大神的资料,本蒟蒻表示不胜感激http://chhaj5236.blog.163.com/blog/static/112881081200942原创 2014-04-25 21:11:55 · 3691 阅读 · 0 评论 -
AC自动机算法
AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有字典树Trie和KMP模式匹配算法的基础知识。KMP算法是单模式串的字符匹配算法,AC自动机是多模式串的字符匹配算转载 2014-04-28 07:48:43 · 979 阅读 · 0 评论 -
LCA的tarjan求法&&POJ 1470的辛酸历程
【LCA的线性解法】LCA(最近公共祖先)的问题十分常见。以前我单纯的认为,每次O(N)扫一遍每个节点的深度、再直接暴力求LCA的效率很高——Nlog(N)。但是往往树会退化成链(或者说它不平衡),如果询问次数多的话肯定TLE。离线解法TARJAN(这人好厉害,强连通算法也是他发明的)的效率则是O(N+Q),其中Q是询问个数。【原理】用到了并查集的思想,每次对于一个点,处理询问中与他有关的一些原创 2014-04-14 10:26:03 · 1403 阅读 · 0 评论 -
kd-tree讲解 & bzoj 2648 & 2716 & 3053 题解
【KD-TREE介绍】在SYC1999大神的“蛊惑”下,我开始接触这种算法。首先,大概的概念可以去百度百科。具体实现,我是看RZZ的代码长大的。我们可以想象在平面上有N个点。首先,按横坐标排序找到最中间的那个点。然后水平划一条线,把平面分成左右两个部分。再递归调用左右两块。注意,在第二次(偶数次)调用的时候,是找到纵坐标中最中间的点,并垂直画一条线。这样效率看上去很好。维护的时候有点像原创 2014-06-24 21:14:49 · 6888 阅读 · 2 评论 -
函数式trie思想 & Bzoj 3261 & 3166 题解
【原题1】3261: 最大异或和Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 497 Solved: 215[Submit][Status]Description 给定一个非负整数序列 {a},初始长度为 N。 有 M个操作,有以下两种操作类型: 1 、A x:添加操原创 2014-07-02 19:24:31 · 1709 阅读 · 2 评论 -
主席树初探 & bzoj 3295: [Cqoi2011] 动态逆序对 题解
【】【】【代码】原创 2014-07-02 18:57:25 · 2405 阅读 · 1 评论 -
关于二分图的一些转载
二分图:二分图又称二部图,是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A, j in B), 则称图G是二分图。e.g. f15e2429c3d174c199250ac1匹配:给定一个二分图,在G的一个子图G’中,如果G’的边集中的任意两转载 2014-07-09 19:55:32 · 712 阅读 · 0 评论 -
POJ 计算几何入门题目推荐(转)
POJ 计算几何入门题目推荐(转) 其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中。之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专业,GIS)。以后若有机会,我会补充、完善这个列表。计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何转载 2014-12-17 18:21:40 · 1353 阅读 · 1 评论 -
Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。3.点连通度:最小割点集合中的顶点数。4.割边(桥):删掉它之后,图必然会分裂为两个或两个以上的子图。5.割边集合:如果有一个边集合,删除这个边集合以后,转载 2015-07-16 15:37:55 · 1033 阅读 · 0 评论 -
矩阵乘法专题2——bzoj 1706 [usaco2007 Nov] relays 奶牛接力跑 题解
【原题】1706: [usaco2007 Nov]relays 奶牛接力跑Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 340 Solved: 162[Submit][Status]DescriptionFJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目。至于进行接力跑的地点原创 2014-05-04 09:50:59 · 2541 阅读 · 0 评论 -
矩阵乘法专题1——bzoj 1297 [SCOI2009] 迷路题解
【原题】1297: [SCOI2009]迷路Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 539 Solved: 367[Submit][Status]Descriptionwindy在有向图中迷路了。 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1。 现在给出该有向原创 2014-05-04 09:39:22 · 2297 阅读 · 0 评论 -
矩阵乘法专题3——bzoj 1898 [Zjoi2004]Swamp 沼泽鳄鱼 题解
【原题】1898: [Zjoi2004]Swamp 沼泽鳄鱼Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 425 Solved: 256[Submit][Status]Description潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区。每当雨季来临,这里碧波荡漾、生机盎然,引来不少原创 2014-05-04 10:05:27 · 1633 阅读 · 0 评论 -
网络流入门—用于最大流的Dinic算法
“网络流博大精深”—sideman语一个基本的网络流问题最早知道网络流的内容便是最大流问题,最大流问题很好理解:解释一定要通俗!如右图所示,有一个管道系统,节点{1,2,3,4},有向管道{A,B,C,D,E},即有向图一张. [1]是源点,有无限的水量,[4]是汇点,管道容量如图所示.试问[4]点最大可接收的水的流量?这便是简单的转载 2014-02-26 07:47:43 · 1056 阅读 · 0 评论 -
网络流
网络流原创 2014-02-26 13:32:58 · 1073 阅读 · 0 评论 -
二叉排序树、平衡树、红黑树
为了理解 TreeMap 的底层实现,必须先介绍排序二叉树和平衡二叉树,然后继续介绍红黑树。平衡二叉树和红黑树又是一种特殊的二叉排序树。二叉排序树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索。1、排序二叉树排序二叉树特性如下: 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值 若它的右子树不空,则右子树上所有节点的值均大转载 2014-02-27 07:53:05 · 6407 阅读 · 1 评论 -
[Splay伸展树]splay树入门级教程
首先声明,本教程的对象是完全没有接触过splay的OIer,大牛请右上角。。首先引入一下splay的概念,他的中文名是伸展树,意思差不多就是可以随意翻转的二叉树PS:百度百科中伸展树读作:BoGang,不知道是不是因为和某位大牛有关系先看一道题目:skydec有n个数,每次他都会把一些数放进一些盒子里,由于skydec太傻×,所以他不能判断数的大小,现在他请求你帮他转载 2014-02-28 21:21:45 · 3269 阅读 · 1 评论 -
C++Vector用法
C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。在标准C++中,用容器向量(vector)实现。容器向量也是一个类模板。标准库vector类型使用需要的头文件:#include 。vector 是一个类模板。不是一种数据类型,vector是一种数据类型。Vector的存储空间是连续的,list不是连续存储的。一、 定义和初始化vecto转载 2014-03-03 14:59:39 · 750 阅读 · 0 评论 -
乘法逆元 (扩展欧几里得或费马小定理)
欧拉定理(又称费马-欧拉定理):已知a和n为正整数,并且a和p互素,则a^phi(n) ≡ 1(mod n)。证明: 设集合Z = {X1, X2, X3, .... , Xphi(n)},其中Xi (i = 1, 2, .. phi(n))表示第i个不大于n与n互质的数。 考虑集合S = {a*X1(mod n), a*X2(mod n), ... ,a*Xphi(n转载 2014-03-05 15:55:33 · 1421 阅读 · 0 评论 -
十个利用矩阵乘法解决的经典题目
好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人,今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质。 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个转载 2014-03-12 16:42:57 · 968 阅读 · 0 评论 -
菜鸟解读2004国家队有关伸展树论文
【序言】在学习了一系列的算法之后,虽然内心是充实了一些,可是依旧对那些更厉害的算法抱有很大的渴望和疑惑。今天我就好好来研究一下伸展树(splay)的有关基础操作。以下是我对2004年国家集训队杨思雨的论文解读。先声明:本人对splay一无所知,菜鸟们可以和我一起探讨,同时也希望各路神牛路过后能多多留言指导!(因网速原因,图插不进去,请谅解) 《伸展树的基本操作与应用》原创 2014-02-28 21:07:00 · 1647 阅读 · 0 评论 -
点分治
树上的算法真的很有意思……哈哈。给一棵边带权树,问两点之间的距离小于等于K的点对有多少个。将无根树转化成有根树进行观察。满足条件的点对有两种情况:两个点的路径横跨树根,两个点位于同一颗子树中。如果我们已经知道了此时所有点到根的距离a[i],a[x] + a[y] 在进行分治时,为了避免树退化成一条链而导致时间复杂度变为O(N^2),每次都找树的重心,这样,所有的子树转载 2014-03-07 14:27:50 · 1711 阅读 · 2 评论 -
旋转卡壳算法
一、目录一些历史:1978年, M.I. Shamos's Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点距离的最大值来确定。 后来直径演化为由一对对踵点对来确定。 Shamos提出了一个简单的 O(n) 时间的算法来确定一个凸 n 角形的对踵点转载 2014-03-09 12:10:12 · 1251 阅读 · 0 评论 -
poj 2502 题解 & dijkstra的堆优化
【序言】求单源最短路径一直是个很热门的话题。网上,大家也在争相比试dijkstra和SPFA的优越性。遗憾的是,我一直没学过dijkstra的堆优化,于是打算好好学习一下。以下是poj上随便找的一道最短路的题目。【dijkstra的堆优化】我们基本的思想是构造一个最小堆。试想,在普通的dij中,每次寻找的当前dis的最小值时,要花费O(N)的效率,这样实在太不佳了。原创 2014-03-17 12:44:47 · 3119 阅读 · 0 评论 -
STL应用——神奇的set
【序言】以前一直仰慕着STL,趁着有空我就来研究一下。【set的介绍】据说set可以完全代替优先队列(queue)。set的本质是一个红黑树。当然,set也可以用作去重,因为每一个数据只出现一次。如果要多次,可以用multiset,原理和set一样。【头文件】include【基本操作】q.insert(x)把元素x插入红黑树q中。q.find(x)返回元素x的位置(注意返回原创 2014-04-13 19:12:36 · 1587 阅读 · 0 评论 -
点分治专题——bzoj 1468 &bzoj 2152 题解
【前言】最近一直在忙着学算法,但是效果似乎不是很好。前段时间的树剖也快忘了= =。树套树没熟练,就开始写主席树了= =。更别说本身就不是很懂的莫比乌斯反演了。~~决定好好复习一下。【点分治的作用】套用SYC大神的话说是:用来解决树上路径点权统计问题。【大致流程】①找出这颗树的重心。②统计经过这个重心的答案③用重心把树割开④对每个“小树”做同样的事【Q1——重心】其实找重原创 2014-05-13 20:50:56 · 3957 阅读 · 5 评论