문제
풀이
서로소 집합 자료구조
, 유니온 파인드 자료구조
문제이다.
- 이 문제는 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)
결과
출처 & 깃허브
BOJ 1717
GITHUB