Leetcode 3613. Minimize Maximum Component Cost
- Leetcode 3613. Minimize Maximum Component Cost
- 1. 解题思路
- 2. 代码实现
- 题目链接:3613. Minimize Maximum Component Cost
1. 解题思路
这一题思路上就是一个DSU的思路,我们首先将所有的边按照权重进行顺序排列,然后从小到大依次进行连接,直至图上的连通区域总数小于k个,此时上一轮我们连通的边就是可以取用的最小的边。
而关于DSU的方法实现,网上实在太多了,我自己也有一篇小博客《经典算法:并查集(DSU)结构简介》作为备忘,这里就不具体展开了,有兴趣的读者自己查阅一下就行了。
2. 代码实现
给出python代码实现如下:
class DSU:def __init__(self, N):self.root = [i for i in range(N)]self.n = Ndef find(self, k):if self.root[k] != k:self.root[k] = self.find(self.root[k])return self.root[k]def union(self, a, b):x = self.find(a)y = self.find(b)if x != y:self.root[y] = xself.n -= 1returnclass Solution:def minCost(self, n: int, edges: List[List[int]], k: int) -> int:edges = sorted(edges, key=lambda x: x[2])dsu = DSU(n)ans = 0for u,v,w in edges:if dsu.n <= k:breakans = wdsu.union(u, v)return ans
提交代码评测得到:耗时123ms,占用内存65.55MB。