Cpp算法-图论-Kruskal
说明
ufs[], find(int), unionn(int, int)
并查集结构edge[]
链式前向星cmp(Edge, Edge)
边排序方案
实现
1 | const int maxn = 1010; |
ufs[], find(int), unionn(int, int)
并查集结构edge[]
链式前向星cmp(Edge, Edge)
边排序方案
1 | const int maxn = 1010; |
例:洛谷P3375
pre()
求前缀数组kmp()
匹配字符串
1 | char s1[1000010], s2[1000010]; |
例:洛谷P4305
hash[]
哈希表find(int x)
查找哈希表中 $x$ 的位置push(int x)
将 $x$ 插入到哈希表中check(int x)
查找 $x$ 是否在哈希表中
1 |
|
例:洛谷P3370
1 | typedef unsigned long long ULL; |
1 | typedef unsigned long long ULL; |
1 | typedef unsigned long long ULL; |
1 | typedef unsigned long long ULL; |
n, m, G[][]
点数、边数、邻接矩阵dist[][]
每对顶点间路径长度pre[][]
每对顶点之间路径make()
建图
1 | const int maxn = 110; |
G[][]
邻接矩阵deg[]
度ans[]
欧拉回路n, e
点数、边数
1 | int G[maxn][maxn], deg[maxn], ans[maxn]; |
n, m
点数、边数head, edge[]
链式前向星ans[], ansi
路径、数组大小vis[]
记录make()
建图
1 | int head[maxn]; |
待完成
1 | graph LR |
!!! tldr “题目及注解”
求上图从 $A$ 到 $E$ 的最短距离
$K$: 阶段
$D(X_I, (X+1)_J)$: 从 $X_I$ 到 $(X+1)_J$ 的距离
$F_K(X_I)$: $K$ 阶段下 $X_I$ 到终点 $E$ 的最短距离
倒推:
$$
K=4\qquad F_4(D_1)=3\qquad F_4(D_2)=4\qquad F_4(D_3)=3
$$
$$
K=5\qquad F_3(C_1)=min(D(C_1,D_1)+F_4(D_1),D(C_1,D_2)+F_4(D_2))=min(5+3,6+4)=8
F_3(C_2)
$$
n, m
点数、边数G[][]
邻接矩阵存图dist[]
路径长度pre[]
路径make()
建图
1 | const int maxn = 10010; |
1 | struct Edge |
1 | int q = n, p[maxm]; |
模板:洛谷P3374
tree[]
树状数组lowbit(int)
神奇的函数add(int x, int k)
第 $x$ 个数加上 $k$ sum(int x)
前 $x$ 个数的和
1 | int tree[2000010]; |