문제
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F5b8a1d3d-cbec-43ad-b2a1-f5ed016580be%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-03-28%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.39.27.png)
풀이
서로소 집합 자료구조
, 유니온 파인드 자료구조
문제이다.
- 이 문제는 pypy로 제출하면 메모리초과로 실패할 확률이 높다.
- 재귀함수를 계속 사용하므로
sys.setrecursionlimit
으로 최대재귀깊이를 재설정하면 좋다.
코드
import sys
input = sys.stdin.readline
sys.setrecursionlimit(100000)
def find_parent(parent: list, x: int) -> int:
if parent[x] == x:
return x
parent[x] = find_parent(parent, parent[x])
return parent[x]
def union_parent(parent: list, a: int, b:int):
a = find_parent(parent, a)
b = find_parent(parent, b)
if a < b:
parent[b] = a
else:
parent[a] = b
def solve(x: int, a: int, b: int):
if x == 0:
union_parent(parent, a, b)
else:
if find_parent(parent, a) == find_parent(parent, b):
print('YES')
else:
print('NO')
if __name__ == '__main__':
n, m = map(int, input().split())
parent = [x for x in range(n + 1)]
for _ in range(m):
x, a, b = map(int, input().split())
solve(x, a, b)
결과
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2Fcc49f59b-2b73-4977-8cfa-0e3f95831f78%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-03-28%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.12.35.png)
출처 & 깃허브
BOJ 1717
GITHUB