摘要: 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 510, M = 100010; 4 int h[N], e[M], ne[M], idx; 5 int n1, n2, m; 6 bool st[N]; //判重 7 阅读全文
posted @ 2020-07-25 02:56 kyk333 阅读(139) 评论(0) 推荐(0)
摘要: 性质:一个图是二分图,当且仅当图中不含奇数环 奇数环:环中边的数量是奇数 二分图:我们能把所有点分为两边,集合内部是没有边的 这个图能被2染色 染色法:一条边的端点颜色不同 由于图中不含奇数环,这个染色过程中一定是没有矛盾的 1 #include <bits/stdc++.h> 2 using na 阅读全文
posted @ 2020-07-25 02:54 kyk333 阅读(181) 评论(0) 推荐(0)
摘要: 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 200010; 4 struct edge { 5 int a, b, w; 6 friend bool operator < (edge e1, edge e2) { 阅读全文
posted @ 2020-07-25 02:52 kyk333 阅读(158) 评论(0) 推荐(0)
摘要: 最小生成树的图对应的图都是无向图,最小生成树没有自环 稠密图用朴素版的Prim算法,O(n ^ 2) 稀疏图用堆优化版的Prim算法,O(m log n) Kruskal算法,O(m log m)和O(m log n)级别一样,m < n ^ 2,先对所有边从小到大排序 如何选择: 稠密图直接朴素版 阅读全文
posted @ 2020-07-25 02:51 kyk333 阅读(348) 评论(0) 推荐(0)
摘要: 用邻接矩阵来存储 Floyd算法原理是动态规划 d[k, i, j]表示:从i这个点,只经过从1~k这些点,到达j点的最短距离 然后k这一维可以去掉 Floyd算法可以有负权,但不能有负权回路,不然最短距离会变成负无穷 1 #include <bits/stdc++.h> 2 using names 阅读全文
posted @ 2020-07-25 02:49 kyk333 阅读(189) 评论(0) 推荐(1)
摘要: spfa算法判断负环时间复杂度最坏nm 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 10010; 4 int h[N], e[N], ne[N], idx, w[N]; 5 int dist[N], cnt[N] 阅读全文
posted @ 2020-07-25 02:48 kyk333 阅读(123) 评论(0) 推荐(0)
摘要: spfa算法实际上是对bellman-ford算法进行了优化 spfa算法一定要求图中不含负环 dist[b]想变小,一定是dist[a]变小了 spfa用宽搜来做优化 队列里面就是所有变小的节点a,只要一个节点变小了,就把它放进队列里面然后去更新它的后继 spfa也可以适用于Dijkstra算法解 阅读全文
posted @ 2020-07-25 02:47 kyk333 阅读(154) 评论(0) 推荐(0)
摘要: 可以开一个结构体存储所有边 这个更新的过程叫做松弛操作 bellman-ford算法循环完之后,所有边的距离一定满足 这个叫三角不等式 在求最短路的时候,如果有负权回路的话,最短路是不一定存在的 bellman-ford算法可以求出来是不是有负权回路,负环,时间复杂度O(nm) 第一层for循环的循 阅读全文
posted @ 2020-07-25 02:46 kyk333 阅读(418) 评论(0) 推荐(0)
摘要: 堆优化版的Dijkstra算法 稀疏图 找最小距离这一步是最慢的,在一堆数中找一个最小的数,所以可以用堆优化,可以变为O(1) 用堆来存储,所有点到起点的最短距离 然后修改其他数的时间复杂度每次是log n,一共修改m次 这里的堆有两种实现方式 1.手写堆:好处:可以时时刻刻保证堆里面只有n个数,支 阅读全文
posted @ 2020-07-25 02:44 kyk333 阅读(251) 评论(0) 推荐(0)
摘要: 稠密图用邻接矩阵 稀疏图用邻接表 最短路问题 只有一个起点是单源 多个起点是多源 n是点的数量,m是边的数量 朴素Dijkstra算法的时间复杂度和边数无关,适合稠密图(边数较多时),m和n ^ 2一个级别时 堆优化版的Dijkstra算法适用于稀疏图,n和m一个级别 SPFA算法是对Bellman 阅读全文
posted @ 2020-07-25 02:43 kyk333 阅读(175) 评论(0) 推荐(0)
摘要: 图的宽搜的一个经典应用就是求拓扑排序 拓扑排序是针对有向图而言,无向图没有拓扑序列 比如这个有向图 图中的边一共是1到2,2到3,1到3,对于每条边都是起点在终点的前面 1 2 3就是一个拓扑序列,都是从前指向后的 并不是所有图都有拓扑序列 只要有一个环,无论如何都不可能有拓扑序列 一个有向无环图, 阅读全文
posted @ 2020-07-25 02:41 kyk333 阅读(2799) 评论(0) 推荐(0)
摘要: 因为这道题的边长为1,所以可以用宽搜 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 100010; 4 int h[N], e[N], ne[N], idx; 5 int d[N]; 6 int n, m; 7 v 阅读全文
posted @ 2020-07-25 02:40 kyk333 阅读(146) 评论(0) 推荐(0)
摘要: 树和图有两种存储方式,树是一种特殊的图,树是无环连通图 图分为有向图和无向图,无向图是一种特殊的有向图 所以就只需要考虑有向图怎样存储 有向图的存储有两大类 第一大类是用得比较少的邻接矩阵,就是开个二维数组g[a][b]存储a到b这条边的信息,这条边有权重就记录权重,没权重就记录这条边是否存在,0或 阅读全文
posted @ 2020-07-25 02:39 kyk333 阅读(165) 评论(0) 推荐(0)