在c++中我们应如何表示一张图呢? 表示完成后又应如何调用呢? 1.图的建立 我们有许多方法存住一张图,在csp-s考试范围常用的方法有: 1.邻接矩阵 2.数组模拟链表(前向星) (当然还有许多其他方法) 邻接矩阵理解很简单: 对于一个二维数组 a [i] [j],a [i] [j]的值即为 点 ...
分类:
其他好文 时间:
2020-01-01 13:20:16
阅读次数:
63
链式前向星法存的带边权的图,(尤其在多组数据时)时间效率比vector略高且节省空间,缺点是不容易对一个点的出边进行排序去重,当平行边无所谓时选择这个方法是非常明智的。链式前向星法存图的最大的问题是要记得给反向边预留空间。 图的存储和遍历,在图中搜索树的父子关系其实一般不是很重要。注意下面的代码是 ...
分类:
其他好文 时间:
2019-12-15 21:43:10
阅读次数:
102
``` #include #include #include #include #define INF 0x3f3f3f3f using namespace std; typedef long long ll; const int maxn = 1000000 + 5; int n,m,be,en;... ...
分类:
其他好文 时间:
2019-12-15 16:11:01
阅读次数:
113
链式前向星,类似于头插法的邻接链表。 ①int tot:用于计算边的编号 ②head[MAX]:用来存储以i为起点的最新加入的边在edge[]中的存储位置 ③struct Node{ int to; int w; int next}; to表示终点;w是权值;next表示下一条边在edge[]数组中 ...
分类:
其他好文 时间:
2019-12-13 23:28:30
阅读次数:
137
题面: 正文: 把每个边用链式前向星存起来,边权为$1$,就可以愉♂快♂地最短路了 ...
分类:
其他好文 时间:
2019-12-06 21:19:25
阅读次数:
97
网络流主要解决三种问题:最大流、最小流和费用流。 最大流算法主要有三种:EK算法、Dinic算法、SAP算法。 本篇博客是关于SAP算法的。最坏的情况下,SAP算法将达到复杂度O(VE2)。 1 #include <iostream> 2 #include <cstdio> 3 #include < ...
分类:
编程语言 时间:
2019-11-23 19:55:31
阅读次数:
72
简单的纯板。prim算法适合稠密图,kruskal算法适合简单图。prim算法复杂度O(n^2),n是图中点的个数,kruskal算法复杂度O(eloge),e为图中边的条数。值得一提的是,加入堆优化的prim算法复杂度可达O(nloge)。 这个是用链式前向星存边+堆优化的prim算法。 ...
分类:
编程语言 时间:
2019-11-03 01:23:29
阅读次数:
94
这是求带负边权但是不能有负环的最短路算法,是中国人发明的一种算法吧也是。 首先我们还是用前向星存图,dis[]存当前的最短路径,然后用队列存储待优化的点。首先将起点入队,其次去遍历他所连接的点,如果可以松弛那么只要当前不在队里就将其入队。每一次去用他的队首去去遍历就可以,当队列为空的时候结束。 代码 ...
分类:
其他好文 时间:
2019-10-24 23:20:08
阅读次数:
64
这是一个用来求没有负边权的最短路径算法,复杂度是n^3,经过优先队列优化则是n^2. 算法思想:首先用前向星存储图,用一个node(需要重载运算符)类的priority_queue来存储被松弛的点(vis[i]==0)的的信息,dis[]数组存放当前到达这个点的最短路。其次进行扫描,看堆顶,也就是当 ...
分类:
其他好文 时间:
2019-10-24 23:13:07
阅读次数:
89
如题: LCA(倍增): LCA(Tarjan): LCA(RMQ): LCA(树链剖分): 原文地址: tarjan RMQ 2021届张若琛 ...
分类:
其他好文 时间:
2019-10-22 22:22:40
阅读次数:
109