입력 | 출력 |
---|---|
7 8 0 1 3 1 1 7 0 7 6 1 7 1 0 3 7 0 4 2 0 1 1 1 1 1 | NO NO YES |
: union-find 정석 문제.
최대 재귀한도 깊이 설정 : sys.setrecursionlimit(200000)
이를 해주지 않으면 런타임 에러가 뜬다.
import sys
sys.setrecursionlimit(200000)
def find(v):
if v == root[v] :
return v
root[v] = find(root[v])
return root[v]
def union(a, b):
a = find(a)
b = find(b)
if a > b : root[a] = b
else: root[b] = a
n, m = map(int, sys.stdin.readline().split())
root = [i for i in range(n+1)]
for _ in range(m):
c, a, b = map(int, sys.stdin.readline().split())
if c == 0: #합집합
union(a, b)
elif c == 1: #같은 집합인지 확인
if find(a) == find(b):
print("YES")
else:
print("NO")