
ACM
zhouzejun1
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
小学期学的算法和做OJ题的各种经验总结
1.数组的引用。用模板时传递的数组必须用常数初始化template<int N>void f(int (&a)[N]){ ...}int main(){ int m = 2; int a[m] = {..}; f(a) //× int a[2] = {..}; f(a) //√}2.使用scanf和cin读取字符串的时候遇到空格会当作两部分分别读取,...原创 2019-07-09 02:05:10 · 410 阅读 · 0 评论 -
带权图最短路径问题
单源最短路问题Bellman-Ford算法:O(|V|×|E|)(浪费时间,遍历每一条边的时候不知道当前边的de.from是不是正确的最短距离; 而且对于每个点都要遍历一次该点的相连边)从起点到第i个点的最短距离di = min{dj + wij | j与i相邻} (所有(到点i相邻的点(j)的最小距离 + 这两个点的距离)中的最小值)实现方法:存边的to, distance,初始化最短...原创 2019-07-06 15:53:41 · 3342 阅读 · 0 评论 -
差分约束
差分约束系统的解法利用到了单源最短路径问题中的三角形不等式。即对于任何一条边u -> v,都有:dv ≤ du + wu->v其中du和dv是从源点分别到点u和点v的最短路径的权值,wu->v是边u -> v的权值。这个不等式可以化成 dv - du ≤ wu->v比如给出三个不等式{b−a≤k1c−b≤k2c−a≤k3\left\{\b...原创 2019-07-06 15:51:04 · 172 阅读 · 0 评论 -
并查集并查集 disjoint set要点
查询a,b是否在同一组合并a,b所在的组rank可以不比较void init() int find() void unite() bool same()可以用来判断图内是否有环(初始化:遍历相连的两个点加入到并查集中)。如果两个点已经在集合里说明他俩已经有一条路了,这时候如果当前边把这两个点相连那么他俩肯定能构成环)//不带rankconst int MAXV = 10;int ...原创 2019-07-06 13:55:46 · 252 阅读 · 0 评论 -
字典map要点
pairpair<type, type> p; pair<type, type> p2(val,val); p.first; p.second;map<char, int> m;//插入//1.m['b'] = 2;//2.m.insert(make_pair('a',1));//查找//1.puts(m['a']);//2.ma...原创 2019-07-06 13:53:01 · 219 阅读 · 0 评论 -
集合set要点
集合set是用二叉搜索树维护的容器//搜索set<type>::iterator it;it = set.find(val);if(it != set.end()) puts("found");//删除set.erase(val);`//遍历for(it = set.begin(); it != set.end(); it++) puts(*it);...原创 2019-07-06 13:51:56 · 159 阅读 · 0 评论 -
BFS、DFS要点
1.bfs最先出的结果就是最短路径用queue或priority_queue(<queue>)不要坐标参数,从queue中取priority_queue每次取出的是最大的(优先级最高的),要重写(默认是)小于比较取元素pq:top(); q:pop()2.dfs需要当前点的坐标参数...原创 2019-07-06 13:41:01 · 264 阅读 · 0 评论 -
DP-划分数
有 n 个无区别的物品 , 将他们分成 不超过 m 堆, 问有多少种分法 ?dijd_{ij}dij表示将数字i 分成j 份的方案数(初始化d00=1d_{00}=1d00=1,其他为0),有2种类型:带0的划分可以少一份。如4 = 0 + 2 + 2 = 2 + 2,把4分成3份 = 把4分成2份即把i分成j份 = 把i分成j-1份。所以dijd_{ij}dij 包含 di,...原创 2019-07-10 18:08:44 · 188 阅读 · 0 评论 -
DP-最长公共子序列LCS、最长上升子序列LIS
小学期学的算法和做OJ题的各种经验总结 小学期学的算法和做OJ题的各种经验总结最长公共子序列 LCS:最长上升子序列 LISDP: O(n^2^)代码贪心+二分O(nlogn)代码:最长公共子序列 LCS:正着遍历,倒着构造c[i,j]表示:(x1,x2....xi) 和 (y1,y2...yj) 的最长公共子序列的长度序列回溯,可以用栈。//dp初始化为0for(i=1;i&l...原创 2019-07-10 16:44:35 · 210 阅读 · 0 评论 -
DP中的背包问题
小学期学的算法和做OJ题的各种经验总结 小学期学的算法和做OJ题的各种经验总结01背包问题优化另外代码完全背包问题区别0-1背包和完全背包多重背包01背包问题不同的物品每种有一件理论上来说就是记录搜索结果的搜索https://www.cnblogs.com/zyacmer/p/9961710.html 讲的很好,取一些精华下来:用dij表示前i个物品剩余空间为j时的最大总...原创 2019-07-10 03:34:09 · 263 阅读 · 0 评论 -
二叉搜索树
小学期学的算法和做OJ题的各种经验总结文章目录小学期学的算法和做OJ题的各种经验总结二叉搜索树:(二分查找)特征:使用:遍历方式:实现:二叉搜索树:(二分查找)特征:保证每个节点的左子树所有点都比自己小,右子树所有点都比自己大。使用:查找某个数是否在集合中:从根出发,比当前结点小就找左儿子,否则找右儿子。插入:查找应该放的位置,直到这个位置是空的,放入。删除:谁来填这个点的位置...原创 2019-07-09 17:04:26 · 116 阅读 · 0 评论 -
小顶堆、小根堆 Small Heap
小顶堆。可以用vector实现。求最大的前k个数就可以构造一个k个元素的小顶堆,堆顶是k个大数中最小的,新元素比堆顶大就替换堆顶、排序,否则不管特征:父亲的值 < 儿子的值,元素从上到下从左到右紧凑排列(完全二叉树)过程:heapify:对当前节点不断向下交换直到没有大小颠倒,交换的时候优先选数值小的儿子换入堆:插在堆的末尾(数组的最后一个),然后不断【向上提升直到没有大小颠倒...原创 2019-07-08 18:37:51 · 1827 阅读 · 0 评论 -
最小生成树
Prim算法(点遍历,距离小的点优先)Kruskal算法(边先排序再遍历,不能构成环(并查集)的边优先)初始化(只用调用init)判断:遍历所有的边,如果该边连接的两个点不在集合中就加入集合并取该边#include <iostream>#include <stdio.h>#include <algorithm>#include <cs...原创 2019-07-06 15:54:38 · 208 阅读 · 0 评论