07 2017 档案
摘要:2017-07-29 16:41:00 writer:pprp 线段树跟区间操作相关,想要在题目限定的时间内解决问题就需要用线段树这种数据结构来解决; 线段树是一种二叉平衡树 参考书目:张新华的《算法竞赛宝典》 题目:敌兵布阵 Problem Description C国的死对头A国这段时间正在进行
阅读全文
摘要:2017-07-28 17:27:41 writer:pprp 有两种优化方法: 题目:亲戚 代码如下:
阅读全文
摘要:2017-07-28 16:12:51 writer:pprp 题目简单描述: 第一行,N代表单词库中有N个单词,随后是N行单词,紧接着M代表待查单词数目,随后是M行待查单词 输出:拼写单词错误的单词数目 算法:用到了哈希表进行快速查找 代码如下:
阅读全文
摘要:2017-07-28 16:01:16 writer:pprp 哈希表:通过节点储存位置和其关键字建立某种直接关系,使得查找的时候无需作比较或者做很少次数的比较就能找到相应的记录; 哈希函数的几种构造方法: 自己制定规则的哈希表 代码如下:
阅读全文
摘要:2017-07-28 09:04:44 writer:pprp 前向星是一种星形表和司法,把所有的边集中在一起,形成一个边列表,比如第i条边(u,v) = w应当分别把起点、终点、权值存在三个数组中,但是下表相同 前向星是按照起始节点从小到大排序,除了你能直接用起点终点定位以外,前向星几乎是完美的。
阅读全文
摘要:2017-07-27 22:37:32 writer:pprp 题目如下: 代码如下:
阅读全文
摘要:2017-07-27 22:21:04 writer:pprp 该算法的本质是动态规划,形式简单,复杂度高为O(n^3); d[i][j] = max(d[i][k]+d[k][j],d[i][j]); 采用的基本手段是松弛 适用:解决多源最短路径问题 代码如下:
阅读全文
摘要:2017-07-27 22:18:11 writer:pprp SPFA算法实质与Bellman-Ford算法的实质一样,每次都要去更新最短路径的估计值。 优化:只有那些在前一遍松弛中改变了距离点的值的点,才可能引起他们邻接点的距离估计值的改变; 做法:使用队列来缩小搜索范围的; 首先要将个点距离估
阅读全文
摘要:2017-07-27 16:02:48 writer:pprp 在BEllman-Ford算法中,其最外层的循环的迭代次数为n-1,如果不存在负权回路,需要迭代的次数是远远小于n-1; 如果在某一次迭代中,松弛操作没有被执行,则说明这次迭代所有的边都没有被松弛,表示任意两点之间在之后的迭代中没有可能
阅读全文
摘要:2017-07-27 08:58:08 writer:pprp 参考书目:张新华的《算法竞赛宝典》 Bellman-Ford算法是求有向图单源最短路径的,dijkstra算法的条件是图中任意一条边的权都是正的;BF算法可以解决存在负边权的图; 算法流程分为三个部分: 例题:虫洞 代码如下:
阅读全文
摘要:2017-07-26 22:30:45 writer:pprp dijkstra算法法则:设置顶点集合S,首先将起始点加入该集合,然后根据起始点到其他顶点的路径长度, 选择路径长度最小的顶点加入到集合S,根据所加入顶点更新源点到其他顶点的路径长度,然后再选取最小边的顶点; 实现:用邻接矩阵 适用条件
阅读全文
摘要:2017-07-26 14:35:49 Prims算法,是一种基于“贪心”的求最小树的算法 ,以每次加入一个邻接边来建立最小树,直到找到N-1个边为止。 规则:以开始时生成树的集合为起始的顶点,然后找出与生成树集合邻接的边中,加权值最小的边来生成树, 为了确定新加入的边不会造成回路,所以每一个新加入
阅读全文
摘要:2017-07-26 10:32:07 writer:pprp Kruskal算法是根据边的加权值以递增的方式,一次找出加权值最低的边来建最小生成树;并且每次添加的边不能造成生成树有回路,直到找到N-1个边为止; 适用范围:边集比较少的时候,可以考虑用这个方法; 做法:将图形中所有的边的权值,递增排
阅读全文
摘要:2017-07-25 22:18:16 writer:pprp 定义:(来源于搜狗百科)并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 作用:用来判断两个节点是否属于同一颗树; 操作:1,查找,Find 2,合并,Merg
阅读全文
摘要:2017-07-25 21:40:22 writer:pprp 在DFS的基础上加上了一个BFS函数
阅读全文
摘要:2017-07-25 15:38:00 writer:pprp 在前一篇图基于邻接列表表示法的代码加了一小部分,加了一个DFS函数,visited[N]数组 参考书目:张新华的《算法竞赛宝典》 代码如下:
阅读全文
摘要:writer:pprp 今天学的是邻接列表表示法 邻接列表表示法是用链表来记录各顶点的邻接顶点; 其节点结构为: 邻接顶点->下一邻接顶点->下一邻接顶点...
阅读全文
摘要:2017-07-25 09:05:06 writer:pprp 今天学的是图,邻接数组表示法。 邻接数组表示法是用一个n*n的数组表示一个具有n个顶点的图形。 数组的索引值表示顶点,以数组内容表示顶点议案的边是否存在边(1,代表有,0代表没有)
阅读全文
摘要:2017-07-24 22:49:57 writer:pprp 优先队列很好使用,能把一个队列中具有优先性的元素提取出来,最大或者最小 分为最小优先队列和最大优先队列; 使用在头文件#include<queue>中 在声明的时候用法: 内置函数:跟队列用法差不多,差距在Pop()函数,删除的是有优先
阅读全文
摘要:2017-07-24 22:04:08 writer:pprp 参考书目:张新华的《算法竞赛宝典》 思路跟小根堆一个样,主要的思路是先构造一个大根堆,然后在每次将最大的一个排除出来,再进行堆排序 代码如下: 我大部分都是按照书上写的来敲的,所以如果单纯让我写还是有一点困难,之后我得再写一遍。
阅读全文
摘要:2017-07-24 17:04:23 writer:pprp 参考书目:张新华的《算法竞赛宝典》 小根堆排序,使用数组模拟堆,时间复杂度为O(nlogn) 调整部分的程序比较难理解,有的地方还是不太清楚。 代码如下:
阅读全文
摘要:writer:pprp 哈夫曼树是最优二叉树,带权值的二叉树 题意大概: 给n个数,经过计算得到最优二叉树的最小权值; 代码如下:(单个测试用例)
阅读全文
摘要:2017-07-23 09:09:19 writer:pprp 二叉查找树,删除的功能,分为三种情况, 代码如下:
阅读全文
摘要:2017-07-22 20:35:51 writer:pprp 在创建二叉树的基础上进行查找,由于二叉树的特点最快为O(logn),最慢为O(n)。 代码如下:
阅读全文
摘要:writer:pprp 思路很容易理解,但是实现还是有一点难度,容易错 参考书目:《算法竞赛宝典》 代码如下:
阅读全文
摘要:writer:pprp 二叉树,基础数据结构,通过一个数组,将其转化为一个二叉树; 完成的主要是:1,向树中插入一个新的节点; 2,创建一个新的树; 3,将其打印出来,三种方式遍历;
阅读全文
摘要:2017-07-21 14:59:35 writer:pprp 好久没有写链表了,有点怀念,之前写的链表比较全,但是大部分都是一步一步照着别人的代码写的,这次是第一次独立写链表; 功能不多,只有创建指定数量的链表和遍历输出链表; 代码如下:
阅读全文
摘要:2017-07-20 17:47:25 writer:pprp 介绍:二分求幂原理: 一般用递归求解: 代码如下: 属于数论,遇到具体的题目还是有点问题
阅读全文
摘要:#include #include #include #include using namespace std; set dict; //集合set的用法:每个元素最多出现一次; 安迪的第一本字典; int main() { string s, buf; while(cin >> s) { for(size_t i = 0 ; i > ...
阅读全文
摘要:2017-08-12 19:50:50 writer:pprp getline函数可以读入一行的字符,不论有没有空格 第一个参数,流 第二个参数 ,将流读入的地方 第三个参数,当读到某个字符的时候停止; stringstream函数是C++提供的另一个字串型的串流(stream)物件,和之前学过的
阅读全文
摘要:2017-07-17 12:00:12 writer:pprp 题目:找到你想要的数的 代码如下: lower_bound()返回一个 iterator 它指向在[first,last)标记的有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个不小于value 的值。该
阅读全文
摘要:2017-07-17 11:56:06 writer:pprp 题目描述 大家都知道,锘爷是XDUdp第一人,所以锘爷决定要去考驾照!(这很有逻辑吧),他为了一次考到驾照,于是买了一辆越野车从学校开回家来练习开车,在途中就会有很多高山和低谷(低谷可能比地平面低)。经过一段时间的调查,现在他已经知道了
阅读全文
摘要:2017-07-17 11:48:47 运行时间超限 注意事项: 1、用scanf来替换cin 可以减少运行时间; 2、用string和stringstream的时候通常好费时间比较长;可以考虑用char进行替换,其操作用strset/strcmp/strcpy弥补;
阅读全文
摘要:int Gcd(int l,int r){ return r==0?l:Gcd(r,l%r); } //最小公倍数 l / Gcd(l,r) * r;
阅读全文
摘要:2017-07-16 07:31:35 writer:pprp 题目介绍:很基础的string用法 题目如下: 读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。 Input题目包含多组用例,每组用例占一行,包含ZOJ三
阅读全文