![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 57
串C
这个作者很懒,什么都没留下…
展开
-
单源最短路的建图方式
题目1:热浪 分析: 由题目可知,求的是两个点之间的最短距离,边权为正数且点数和边数属于同一量级,使用堆优化版的dijkstra进行求解即可。 这道题是无向图,我们建有向图能求解吗? 不能。 因为如果a 和 b有一条边, 我们只建一条有向边, 意味着 a能到b, b确不能到a, 如果输入时起点是b,终点是a,那么我们就到达不了a,答案出错。 关于能否只建有向图求解无向图的问题, 一定要证明,如果证明不出来,直接按题目要求建立无向图。 时间复杂度:O(m∗logm)O(m * log ^m)O(m∗logm)原创 2022-05-31 10:03:28 · 117 阅读 · 0 评论 -
二分图的两个常用算法
染色法判断是否是二分图 题目1: 染色法判定二分图 时间复杂度:O(n+m)O(n + m)O(n+m) 代码区: #include<iostream> #include<cstring> using namespace std; const int N = 1e5 + 10, M = 2e5 + 10; int n, m; int h[N], e[M], ne[M], idx; int color[N]; void add(int a, int b) { e[idx原创 2022-05-29 09:48:59 · 79 阅读 · 0 评论 -
最小生成树
最小生成树的图中允许存在负环 prim 思路: 时间复杂度:O(n2+m), n 表示点数,m 表示边数 模版: int n; // n表示点数 int g[N][N]; // 邻接矩阵,存储所有边 int dist[N]; // 存储其他点到当前最小生成树的距离 bool st[N]; // 存储每个点是否已经在生成树中 // 如果图不连通,则返回INF(值是0x3f3f3f3f), 否则返回最小生成树的树边权重之和 int prim() {原创 2022-05-28 18:00:28 · 113 阅读 · 0 评论 -
最短路常用算法
最短路的专有名词: 源点: 表示起点 汇点: 表示终点 稀疏图: 点数和边数在同一个量级 稠密图: 边数和点数的平方在同一个量级 注意: 求最短路的要求的是该图不能含有负环, 如果图中有负环, 那么我们可以一直在这个负环中走无穷多次, 那么我们的最短路的值就会变成负无穷。 单源最短路和多源最短路有什么区别? 单源最短路: 求的是固定的一个起点, 到它所有能到的点之间的距离。 多源最短路: 求的是起点不固定, 即任意两个点之间的距离 普素版dijkstra 思路: 模版: int g[N][N]; /原创 2022-05-28 16:35:10 · 208 阅读 · 0 评论 -
拓扑排序算法
算法一:拓扑排序: 模版: 时间复杂度: O(n+m), n 表示点数,m 表示边数 bool topsort() { int hh = 0, tt = -1; // d[i] 存储点i的入度 for (int i = 1; i <= n; i ++ ) if (!d[i]) q[ ++ tt] = i; while (hh <= tt) { int t = q[hh ++ ];原创 2022-05-28 10:27:23 · 66 阅读 · 0 评论