하루살이 개발자

[BaekJoon 1717번] 집합의 표현 문제(Python) 본문

코딩테스트

[BaekJoon 1717번] 집합의 표현 문제(Python)

하루살이 2022. 2. 20. 12:53

집합의 표현 문제입니다.

 

문제링크:https://www.acmicpc.net/problem/1717

 

1717번: 집합의 표현

첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는

www.acmicpc.net

 

풀이

union-find 알고리즘을 이용한 문제

 

Code

import sys
input = sys.stdin.readline

n, m = map(int, input().split())

# 부모 테이블 초기화
parent = [i for i in range(n + 1)]

# 부모가 같으면 같은 집합
def find(target):
    if target == parent[target]:
        return target

    parent[target] = find(parent[target])
    return parent[target]

# 합집합
def union(a, b):
    a = find(a)
    b = find(b)

    if not a == b:
        parent[b] = a

for i in range(m):
    x, a, b = map(int, input().split())
    if x == 0:
        union(a, b)
    else:
        if find(a) == find(b):
            print("YES")
        else:
            print("NO")