기본적인 union-find로 무리짓고 대푯값의 갯수를 세는 문제입니다.
def find(x):
if parents[x] == x:
return x
parents[x] = find(parents[x])
return parents[x]
def union(x, y):
x = find(x)
y = find(y)
if x > y:
x, y = y, x
parents[y] = x
for test in range(1, int(input()) + 1):
N, M = map(int, input().split())
parents = {i: i for i in range(1, N + 1)}
for i in range(M):
a, b = map(int, input().split())
if find(a) != find(b):
union(a, b)
group = set()
for i in range(1, N + 1):
if parents[i] not in group:
x = find(i)
if x not in group:
group.add(x)
print(f'#{test} {len(group)}')
'practivceAlgorithm > swexpertacademy' 카테고리의 다른 글
[SWEA][Python] 1795 인수의 생일파티 (0) | 2021.10.15 |
---|---|
[SWEA][Python] 1249 보급로 (0) | 2021.10.15 |
[SWEA][Python] 1251 하나로 (0) | 2021.10.14 |
[SWEA][Python] 5656 벽돌깨기 (0) | 2021.10.12 |
[SWEA][Python] 4012 요리사 (0) | 2021.10.12 |