最小生成树 计算带权无向连通图G的最小生成树。输入格式: 第一行两个整数:N(1≤N<300000),表示结点集{1,2,3N};M(0 ≤ M≤600000)表示边的条数。 接下来M行,每行表示一条带权的边,用3个整数uvc表示,分别表示一条边的两个端点以及其权值(权值范围0<c<10°)输出格式: 一个整数,表示G的最小生成树的边权之和。 【样例输入】 5101231371491552362482 5434 93 57452 【样例输出】 15
时间: 2024-02-18 07:05:35 浏览: 162
这是一个经典的最小生成树问题,可以使用Kruskal或Prim算法求解。下面是Kruskal算法的实现:
```python
# 定义边的结构体
class Edge:
def __init__(self, u, v, w):
self.u, self.v, self.w = u, v, w
# 并查集
class UnionFind:
def __init__(self, n):
self.parent = list(range(n))
self.size = [1] * n
def find(self, x):
if self.parent[x] != x:
self.parent[x] = self.find(self.parent[x])
return self.parent[x]
def union(self, x, y):
px, py = self.find(x), self.find(y)
if px == py:
return False
if self.size[px] < self.size[py]:
px, py = py, px
self.parent[py] = px
self.size[px] += self.size[py]
return True
# Kruskal算法
def kruskal(n, edges):
uf = UnionFind(n)
edges.sort(key=lambda e: e.w)
res = 0
for e in edges:
if uf.union(e.u, e.v):
res += e.w
return res
# 读入数据
n, m = map(int, input().split())
edges = []
for i in range(m):
u, v, w = map(int, input().split())
edges.append(Edge(u-1, v-1, w))
# 求解最小生成树
print(kruskal(n, edges))
```
其中,Kruskal算法主要包含两个部分:边的排序和并查集的维护。边的排序可以使用Python内置的`sort`函数,也可以使用`heapq`模块实现。并查集的维护包括`find`和`union`操作,其中`find`操作采用路径压缩优化,`union`操作采用按秩合并优化。
阅读全文
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![cpp](https://img-home.csdnimg.cn/images/20250102104920.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)