Open azl397985856 opened 1 week ago
class Solution:
def makeConnected(self, n: int, connections: List[List[int]]) -> int:
graph = collections.defaultdict(list)
for edge in connections:
graph[edge[0]].append(edge[1])
graph[edge[1]].append(edge[0])
seen = set()
groups, extra = 0, 0
for i in range(n):
if i in seen:
continue
seen.add(i)
queue = [i]
curnode, curedge = 1,0
while queue:
node = queue.pop()
for child in graph[node]:
curedge+=1
if child not in seen:
curnode+=1
seen.add(child)
queue.append(child)
groups += 1
extra += max(0, curedge//2-curnode+1)
if extra>=groups-1:
return groups-1
else:
return -1
class Solution:
def makeConnected(self, n: int, connections: List[List[int]]) -> int:
def find(x):
if p[x] != x:
p[x] = find(p[x])
return p[x]
cnt, size = 0, n
p = list(range(n))
for a, b in connections:
if find(a) == find(b):
cnt += 1
else:
p[find(a)] = find(b)
size -= 1
return -1 if size - 1 > cnt else size - 1
class Solution {
public:
int makeConnected(int n, vector<vector
vector<int> fa(n);
iota(fa.begin(), fa.end(), 0);
function<int(int)> findset = [&](int x) {return x == fa[x] ? x : fa[x] = findset(fa[x]);};
int part = n;
for (auto&& c: connections) {
int p = findset(c[0]), q = findset(c[1]);
if (p != q) {
--part;
fa[p] = q;
}
}
return part - 1;
}
};
1319. 连通网络的操作次数
入选理由
暂无
题目地址
https://leetcode-cn.com/problems/number-of-operations-to-make-network-connected/
前置知识
暂无
题目描述