1 /* 2 //链式前向星维护的是一个边集数组 3 const int N = 1e6+5;//边的数目 4 int head[N];//某个点相邻的第一条边的编号 5 int cnt;//边的数目 6 struct Edge{ 7 int to;//这条边到达的终点 8 int dis;//这条 ...
分类:
其他好文 时间:
2020-03-27 12:28:19
阅读次数:
57
1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl(i) scanf("%lld",& ...
分类:
其他好文 时间:
2020-03-15 21:55:37
阅读次数:
58
链式前向星总结 1. 结构 1. 结构体数组edge存边, 2. head[i]存以i为起点的第一条边(在edge中的下标)。 2. 增边 1. 若以点i为起点的边新增了一条,在edge中的下标为j。 2. 那么edge[j].next=head[i];然后head[i]=j。 3. 3. 遍历 4 ...
分类:
其他好文 时间:
2020-02-10 18:00:54
阅读次数:
83
图的存储方式 在说最短路之前,先介绍一下图的几个存储方式:主要有vector、邻接表和链式前向星三种存储方式。其中会牵扯到稀疏图和稠密图的概念, 稠密图指点的个数的平方和边的个数是一个数量级的($n^2 ≈ m$) , 两者数量级类似别称为稀疏图 。 G[maxn]; for(int i=1;i f ...
分类:
其他好文 时间:
2020-02-02 15:31:23
阅读次数:
74
1.0 Floyd(),简单粗暴,三重循环遍历,可求多源两点距离,但毕竟复杂度高,不适合过大的图。 2.0 Bellman(),借用一个(存放起点u、终点v、权值w的)结构体edge,遍历次数取决于边的个数*节点个数n,将复杂的三重循环,缩小到O(nm)的复杂度。 2.1 在Bellman()的基础 ...
分类:
其他好文 时间:
2020-02-01 21:14:27
阅读次数:
58
在极端情况下,图特别大,用邻接链表也会超空间限制,此时需要用到链式前向星来存图。 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int inf = INT_MAX / 10; 5 const int num = ???; 6 s ...
分类:
其他好文 时间:
2020-01-30 22:54:25
阅读次数:
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