practivceAlgorithm/swexpertacademy

[SWEA][Python] 5248 그룹 나누기

findTheValue 2021. 10. 6. 06:48

union- find를 통해 집합을 나누고 group의 크기를 측정해 출력해줬습니다.

 

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())
    prefer_set = list(map(int, input().split()))
    parents = {i: i for i in range(1, N + 1)}
    for i in range(M):
        a, b = prefer_set[i * 2], prefer_set[i * 2 + 1]
        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)}')