코딩하는 해맑은 거북이
[Python] 집합의 표현 - 백준 본문
해당 글은 백준 1717번 문제 '집합의 표현'을 다룬다.
문제
https://www.acmicpc.net/problem/1717
1717번: 집합의 표현
초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작
www.acmicpc.net
설명
해당 문제는 그래프의 유니온 파인드 해결법으로 풀 수 있다.
1. N+1 개의 노드에 대해 자기자신으로 부모를 초기화 해준다.
2. union시 더 작은 값으로 부모를 지정해준다.
3. 같은 집합인지 판별하기 위해, 부모를 찾아 비교해준다.
또한, 주의할 점은 재귀한계를 설정해주지 않았더니 시간초과가 발생했었다.
코드
import sys
sys.setrecursionlimit(100000)
input = sys.stdin.readline
n, m = map(int, input().split())
parent = [0]*(n+1)
for i in range(n+1):
parent[i] = i
def find_parent(parent, x):
if parent[x] != x:
parent[x] = find_parent(parent, parent[x])
return parent[x]
def union_parent(parent, a, b):
a = find_parent(parent, a)
b = find_parent(parent, b)
if a < b:
parent[b] = a
else:
parent[a] = b
for _ in range(m):
t, a, b = map(int, input().split())
if t == 0:
union_parent(parent, a, b)
else:
if (find_parent(parent, a) == find_parent(parent, b)):
print("YES")
else:
print("NO")
'코딩테스트' 카테고리의 다른 글
[Python] 노드사이의 거리 - 백준 (BFS) (0) | 2023.08.26 |
---|---|
[Python] 보물섬 - 백준 (BFS) (0) | 2023.08.25 |
[Python] 연구소 - 백준 (BFS) (1) | 2023.08.23 |
[Python] 숫자판 점프 - 백준 (DFS) (0) | 2023.08.23 |
[Python] 배열 돌리기 1 - 백준 (0) | 2023.08.23 |
Comments