스터디 숙제로 유니온 파인드를 풀게 되었는데 문제들이 너무 어려워서 개념 이해를 하고자 혼자 찾아서 풀게된 문제다.
이 문제를 덕분에 유니온 파인드에 대한 접근 방법을 이해하게 되어서 여러가지 방법으로 응용할 수 있었다!
import sys
input = sys.stdin.readline
sys.setrecursionlimit(100000)
def find(a):
if a == parent[a]: # 자기 자신이 루트 노드이면 a 반환
return a
temp = find(parent[a]) # a의 루트 노드 찾기
parent[a] = temp # 부모 테이블 갱신
return parent[a]
def union(a, b):
rootA = find(a) # 3
rootB = find(b) # 2
if rootA != rootB:
parent[rootA] = rootB
else:
return
def check(a, b):
if find(a) == find(b):
return "YES"
else:
return "NO"
n, m = map(int, input().split())
parent = dict()
# 초기화
parent = [i for i in range(n + 1)]
for i in range(m):
number, a, b = map(int, input().split())
# union
if number == 0:
union(a, b)
#find
else:
print(check(a, b))