코드
import sys
sys.setrecursionlimit(10**5) # 재귀 깊이 제한
input = sys.stdin.readline # 빠른 입력
n,m = map(int, input().split())
set = [i for i in range(n+1)] # 부모 노드를 기록할 리스트
def find(a, parent):
if a != parent[a]: # 루트 노드가 아니라면
parent[a] = find(parent[a], parent) # 루트 노드에 도달할 때까지 순회
return parent[a] # 루트 노드 반환
def union(a,b,parent): # 트리 합치기
a = find(a, parent) # 루트 노드 찾기
b = find(b, parent)
if a < b: # 일반적으로 작은 값이 부모 노드로 만든다.
parent[b] = a
else:
parent[a] = b
for _ in range(m):
o,a,b = map(int, input().split())
if o == 0:
union(a,b,set)
elif o == 1:
if find(a,set) == find(b,set):
print("YES")
else: print("NO")
서로소 집합에 대한 개념을 알 수 있는 문제였다.
'백준' 카테고리의 다른 글
[백준] 1976번 여행 가자 파이썬 코드 (0) | 2024.01.21 |
---|---|
[백준] 17352번 여러분의 다리가 되어 드리겠습니다! 파이썬 코드 (0) | 2024.01.21 |
[백준] 9020번 골드바흐의 추측 파이썬 코드 (0) | 2024.01.20 |
[백준] 4948번 베르트랑 공준 파이썬 코드 (0) | 2024.01.19 |
[백준] 1929번 소수 구하기 파이썬 코드 (0) | 2024.01.19 |
코드
import sys
sys.setrecursionlimit(10**5) # 재귀 깊이 제한
input = sys.stdin.readline # 빠른 입력
n,m = map(int, input().split())
set = [i for i in range(n+1)] # 부모 노드를 기록할 리스트
def find(a, parent):
if a != parent[a]: # 루트 노드가 아니라면
parent[a] = find(parent[a], parent) # 루트 노드에 도달할 때까지 순회
return parent[a] # 루트 노드 반환
def union(a,b,parent): # 트리 합치기
a = find(a, parent) # 루트 노드 찾기
b = find(b, parent)
if a < b: # 일반적으로 작은 값이 부모 노드로 만든다.
parent[b] = a
else:
parent[a] = b
for _ in range(m):
o,a,b = map(int, input().split())
if o == 0:
union(a,b,set)
elif o == 1:
if find(a,set) == find(b,set):
print("YES")
else: print("NO")
서로소 집합에 대한 개념을 알 수 있는 문제였다.
'백준' 카테고리의 다른 글
[백준] 1976번 여행 가자 파이썬 코드 (0) | 2024.01.21 |
---|---|
[백준] 17352번 여러분의 다리가 되어 드리겠습니다! 파이썬 코드 (0) | 2024.01.21 |
[백준] 9020번 골드바흐의 추측 파이썬 코드 (0) | 2024.01.20 |
[백준] 4948번 베르트랑 공준 파이썬 코드 (0) | 2024.01.19 |
[백준] 1929번 소수 구하기 파이썬 코드 (0) | 2024.01.19 |