728x90
https://www.acmicpc.net/problem/1717
1717번: 집합의 표현
초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작
www.acmicpc.net
2023.04.11 - [코딩 테스트/개념] - Union-Find
# 1 ≤ N ≤ 90
import sys
readline = sys.stdin.readline
n, m = map(int, readline().split())
union_find = [i for i in range(n + 1)]
def find(v):
if union_find[v] == v:
return v
new_v = find(union_find[v])
union_find[v] = new_v
return new_v
def union(v1, v2):
find_v1 = find(v1)
find_v2 = find(v2)
if find_v1 != find_v2:
union_find[find_v2] = find_v1
for _ in range(m):
calc, a, b = map(int, readline().split())
if calc == 0:
union(a, b)
elif calc == 1:
if find(a) == find(b):
print("YES")
else:
print("NO")
두 집합을 합하고, 같은 집합인지 확인하고.. 유니온 파인드 문제다! 함수 구현했던 거 활용해서 바로 풀었다.
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 2252번] 줄 세우기 (0) | 2023.04.15 |
---|---|
[백준 1976번] 여행 가자 (0) | 2023.04.15 |
[백준 2193번] 이친수 (0) | 2023.04.14 |
[백준 1463] 1로 만들기 (0) | 2023.04.14 |
[백준 11051번] 이항 계수 (0) | 2023.04.14 |