算法学习知识记录
文章平均质量分 68
侧耳倾听QAQ
在役xcpc选手(马上退役滚蛋),考研狗,分享一些知识总结。
展开
-
07 并查集问题之食物链问题(并查集维护额外信息)
发现问题性质以及解题思路记录每个点和根节点的关系,每个点到其父节点的距离代表它和根节点的一个关系,推出来一个关系,和父节点距离为1时候,代表这个点可以吃父节点,和父节点距离为2的时候,代表这个点被父节点吃,和父节点距离为3的时候,代表和父节点是同类。然后整理一下就是:...原创 2022-06-04 15:21:39 · 215 阅读 · 0 评论 -
06 算法竞赛进阶指南基本算法总结
文章目录基础算法位运算递归与递推前缀和与差分二分排序倍增贪心基础算法位运算补码表示法,理解c++无符号,有符号整数在计算机中的存储方式。各种按位运算,包括取位,置位,移位等,以及一些常见技巧。快速幂,64位整数乘法。二进制状态压缩,使用二进制数对状态进行压缩,提取的方法。位运算不进位的特点以及各位之间的独立性。递归与递推能想象问题“状态空间”,理解各种基本算法其实是对状态空间的遍历与映射。递推边界,目标,递推公式的发现与设计。理解递归思想,子问题,递归边界,回溯时还原现场。递归原创 2022-04-29 09:04:55 · 243 阅读 · 0 评论 -
05 算法竞赛进阶指南最短路习题+例题 (附代码+注释+思路)-01
文章目录acwing 340 通信线路题目思路解题代码acwing 341 最优贸易题目思路解题代码acwing 340 通信线路题目思路二分做法思路定义在[0,1000001] 这个区间中的性质如下:对于区间中的某一个点x。求出1走到N,最少经过的长度大于x的边的是否小于等于k。求出从1到N最少经过几条长度大于x的边。可以将所有的边权分类:大于等于x的为1,小于的为0。采用双端队列的BFS来求从1到N的最短路。解题代码#include <iostream>#inc原创 2022-04-06 22:46:02 · 526 阅读 · 0 评论 -
04 最小生成树 Kruskal算法& prim算法(附代码实现) 图论2
最小生成树给定一张边带权的无向图 G = (V,E), n = |V|,m = |E|。由 V 中全部 n 个顶点和 E 中 n-1 条边构成的无向连通子图被称为 G 的一颗生成树。边的权值之和最小的生成树被称为无向图 G 的最小生成树。定理:任意一颗最小生成树一定包含无向图中权值最小的边。证明:反证法。假设无向图 G = (V,E) 存在一颗最小生成树不包含权值最小的边。设e = (x,y,z)是权值最小的边。把 e 添加到树中, e 会和树上从 x 到 y的路径一起构成一个环,并且环上其他的边原创 2022-04-04 18:05:31 · 890 阅读 · 1 评论 -
03 最短路 dijkstra算法&spfa算法&floyd算法(附带实例代码) 图论-1
最短路对于一条有向图,我们一般采用邻接矩阵和邻接表两种存储方式。对于无向图,可以把看无向边看作两条方向相反的有向边。从而采用与有向图一样的存储方式。邻接表的图如下邻接矩阵如下图链表实现邻接表实现代码/// 加入有向边(a,b),权值为cvoid (int a,int b){ e[idx] = b,w[idx] = c,ne[idx] = h[a],h[a] = idx++; }/// 访问从a出发的所有边for(int i=h[a]; ~i; i = ne[i]){ i原创 2022-04-04 13:17:33 · 1267 阅读 · 2 评论 -
02 最近公共祖先(LCA)树上倍增法(附代码实现模板)
最近公共祖先(LCA)最近公共祖先解决的问题给定一颗有根树,若节点z即是节点x的祖先,也是节点y的祖先,则称z是x,y的公共祖先。在x,y的所有公共祖先中,深度最大(距离根节点的距离最远的)的一个称为x,y的最近公共祖先,记作LCA(x,y)。LCA(x,y)是x到根的路径与y到根的路径的交会点。它也是x与y之间的路径上深度最小的节点。求最近公共祖先的方法通常有以下三种。方法1 向上标记法从 x 向上走到根节点,并标记所有经过的节点。从y向上从到根节点,当第一次遇到已经标记的节点时,就找到了原创 2022-04-01 13:17:31 · 1129 阅读 · 1 评论 -
01 快速幂 & 龟速乘(附带实现代码) 算法总结记录
快速幂快速幂用于解决的问题在我们的学习语法的时候,比如我们求一个2的十次方的数字,我们可以采用循环一下就是枚举一下循环从1~10,这样我们就可以求出我们想要的答案,当次方为一千,一万,十万,我们这个方法都可以做,但是当我们乘上一个上亿级的次方,我们这样的方法就行不通了,我们知道c++在运行程序时 1s的运行次数大概是10的8次方,当我们上亿次的次方,在采用循环的方式就会超时,快速幂就是基于解决这种问题的方法。我们采用一个例子,让我们更加通俗易懂。这类问题通常伴随着取模。快速幂样例解释 首先呢我们运原创 2022-03-26 13:15:41 · 921 阅读 · 1 评论 -
c++的STL常用库的使用大总结
STL中的vector,queue,priority_queue,deque,set,multiset,map,bitset,常用的算法容器c++一些运算符的优先级从高到低的顺序如下表示加减 移位 比较大小 位与 异或 位或± <<,>> <,>,==,!= & xor(c++^) |#include vector 可理解为变长数组,它的内部实现基础倍增思想。v原创 2021-10-24 17:04:10 · 1911 阅读 · 1 评论