随笔分类 - 算法与数据结构
摘要:差分约束系统是求解一组特殊的不等式组的方法。 差分约束举例 差分约束是有n个变量和m个不等式组成的。其中每个不等式都是形如:\(x_i-x_j \leq b_k(i,j\in[1,n], k\in[1,m])\) 或 \(x_i-x_j \geq b_k(i,j\in[1,n], k\in[1,m]
阅读全文
摘要:链式前向星是在看差分约束的题的时候偶然间看到的,一开始没太重视它,感觉好像没怎么听说过。还要定义结构体,而且需要辅助数组,感觉挺麻烦的。还不如直接用STL的vector+pair定义的邻接表好用。但是后来发现大家写SPFA的时候都用的链式前向星,感觉还是写个博客学习一下吧,以前都没听说过,太菜了。。
阅读全文
摘要:前言 本篇博客按照灯神的线段树进行讲解(这个思路太清晰易懂了!!!)这只是最基本的线段树,线段树还有一些进阶的用法,待后续补充。 先例相对基础,比较适合对线段树没有了解的人来入门。如果对线段树有一定了解可以直接跳过先例。 先例 对于一个数组arr 当我们想要求数组中某个区间(L, R)的和,时间复杂
阅读全文
摘要:这个tarjan算法求的是有向图中的强连通分量,并将他们合并。 强连通分量 (如果会可以直接看tarjan部分)那什么是强连通分量呢?强连通嘛,就是图中任意两点能相互到达。那强连通分量就是一个图中的强连通子图。 环是最简单的强连通分量: 那你如果从1出发,只要转一圈就能经过所有点。 强连通分量不等于
阅读全文
摘要:并查集是一种树型数据结构,用于查找不相交的子集,并将他们合并在一起,简称并查集。并查集分为拆分、查找和合并三个操作。 并查集 查找 pre数组记录所有结点的前驱结点,根节点的前驱结点是它自己 find函数先找到x的根节点 int pre[1000];//1. int find(int x)//2.
阅读全文
摘要:Dijkstra是单源最短路算法,用于求正权图源点到每个顶点的最短路。Dijkstra用到了一些BFS的思想 算法步骤 初始化dis数组和vis数组。 dis[i]表示源点到第i个点的距离,初始化为INF,表示无穷大。(INF为自己定义) vis[i]数组表示第i个点的最短路是否用于处理过未求出最短
阅读全文
摘要:Floyd是用来求全局任意两点之间的最短路的。 Floyd很好理解,依次用每个点去松弛其它所有边,感觉没什么好讲的。理解了dijkstra和SPFA之后,感觉Floyd就很简单易懂了,直接上代码吧。 时间复杂度:O(n^3) 空间复杂度:O(n^2) 算法实现 for(int k=0; k<n; k
阅读全文
摘要:SPFA是个很神奇的算法,他在一般情况下时间会跑的很快,肯定有人想用SPFA来代替dijkstra,但是有一种特殊的数据专门来卡SPFA,只能让dijkstra过,SPFA过不去,那就是网格图,我稍后会讲为什么网格图可以卡掉SPFA。 但是为什么SPFA跑不过dijkstra,大家还要用SPFA?因
阅读全文

浙公网安备 33010602011771号