https://www.acmicpc.net/problem/1717
1717번: 집합의 표현
초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작
www.acmicpc.net
나의 풀이
import sys
sys.setrecursionlimit(100000)
input = sys.stdin.readline
n,m = map(int, input().split())
arr = [i for i in range(n+1)]
def find(a):
if a == arr[a]:
return a
arr[a] = find(arr[a])
return arr[a]
def union(a,b):
pa = find(a)
pb = find(b)
arr[pa] = pb
for _ in range(m):
num, a,b = map(int, input().split())
if num == 0 :
union(a,b)
elif num == 1:
if find(a) == find(b):
print("YES")
else:
print("NO")
- Union - find 알고리즘 사용
- 1 <= n <=1,000,000
- 1<=m<=100,000
- 수가 커서 sys.setrecursionlimit(100000)으로 제한해준다!
'💡 Codeing Test > 백준' 카테고리의 다른 글
[백준_2468번] 안전 영역 (python) (0) | 2023.08.05 |
---|---|
[백준_4963번] 섬의 개수 (python) (0) | 2023.08.05 |
백준 10808번) 알파벳 개수 (JAVA) (0) | 2023.03.07 |
백준 11659) 구간 합 구하기4 (JAVA) (0) | 2023.03.05 |
백준 11720) 숫자의 합 (JAVA) (0) | 2023.03.05 |