按边权把边从小到大排序 用并查集加边 检查是否为连通图 #include<iostream> #include<algorithm> using namespace std; const int N = 100010, E = 200010; struct edge{ int a, b, w; bo ...
分类:
编程语言 时间:
2020-09-10 22:59:17
阅读次数:
38
隔了几个月,又开始写博客了qwq kruskal时间复杂度为O(nlogn)它的算法思路是这样的:我们根据边的权值将所有边排序,然后枚举每条边,用并查集去查询这条边的两个端点是否在同一集合内,若在同一集合内,则删掉这条边,若不在同一结合则加入这条边,并将这两个端点所在的集合合并。附一下代码: 123 ...
分类:
其他好文 时间:
2020-08-17 17:07:58
阅读次数:
90
#include <bits/stdc++.h> #define MAXN 200005 using namespace std; int node,edge,ans=0,k=0; int fat[MAXN],siz[MAXN]; struct EDGE { int from,to,cost; } ...
分类:
编程语言 时间:
2020-07-30 01:20:30
阅读次数:
71
prim 先将一个点加入集合中,维护一个dis数组,表示该点距集合中的点的最小距离,每次选取dis的最小值,并把那个点加入集合,更新dis。 可以用优先队列优化 kruskal 把所有的边按边权从小到大排序,利用并查集维护集合关系,对于每条边,若两点不在同一集合,则把两点连接。 Boruvka 假设 ...
分类:
其他好文 时间:
2020-07-27 16:08:42
阅读次数:
75
题目描述 给定一个 \(n\) 个点 \(m\) 条边的无向连通图,编号为 $1$ 到 \(n\) ,没有自环,可能有重边,每一条边有一个正权值 \(w\) 。 给出 \(q\) 个询问,每次给出两个不同的点 \(u\) 和 \(v\) ,求一条从 \(u\) 到 \(v\) 的路径上边权的最大值最 ...
分类:
Web程序 时间:
2020-07-26 19:44:14
阅读次数:
96
Boruvka 生成树算法 Boruvka 算法的一句话思想便是: “从所有当前的连通块向其他连通块扩展出最小边,直到只剩一个连通块”,其中取最小边的贪心思想是 Kruskal 的主体,而向外扩展又是 Prim 的思想 —— 基于另外两种生成树算法,Boruvka 的正确性显然。 代码框架: whi ...
分类:
编程语言 时间:
2020-07-26 01:14:08
阅读次数:
71
如何理解与实现最小生成树呢?Prim算法与Kruskal算法背后的思想又是怎么样的呢?一起来探索吧~ ...
分类:
编程语言 时间:
2020-07-16 22:06:12
阅读次数:
134
先讲下部分分怎么搞。 有个非常暴力的暴力做法: 对于每一个询问,把边权大于 \(w_j\) 的边加入,并查集维护联通块即可。 时间复杂度 \(\mathcal{O(qm)}\),可以过 \(\mathrm{Subtask\ 1}\) 当 \(t_i=2\) 的时候,可以直接 kruskal 重构树, ...
目录 二分查找 排序的写法 BFS的写法 DFS的写法 回溯法 树 递归 迭代 前序遍历 中序遍历 后序遍历 构建完全二叉树 并查集 前缀树 图遍历 Dijkstra算法 Floyd-Warshall算法 Bellman-Ford算法 最小生成树 Kruskal算法 Prim算法 拓扑排序 查找子字 ...
分类:
其他好文 时间:
2020-07-07 18:08:11
阅读次数:
74
Kruskal算法(适用于稀疏图) 1、将所有边按权重从小到大排序 O(mlogn) 2、枚举每条边a,b,权重c O(m) if a,b不连通 将这条边加入集合中 判断连通 使用并查集来判断两个连通块是否连通 #include<iostream> #include<algorithm> using ...