공통 원소가 없는 두 집합을 의미한다.
서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조
- union 연산 : 2개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산
- find 연산 : 특정한 원소가 속해있는 집합이 어떤 집합인지 알려주는 연산
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_p = find_parent(parent,a)
b_p = find_parent(parent,b)
# 부모가 같은 경우 사이클 발생
if a_p == b_p :
print("사이클 발생")
return False
elif a_p > b_p:
parent[a_p] = b_p
else :
parent[b_p] = a_p
return True
# 노드와 간선의 개수 입력
V,E = map(int,input().split())
parent = [0]*(V+1)
# 부모를 자기 자신으로 초기화
for v in range(1,V+1):
parent[v] = v
cycle = False
# union 연산 수행
for e in range(E):
a,b = map(int,input().split())
cycle = union_parent(parent,a,b)
# 사이클 발생시 중단
if not cycle:
break
for v in range(1,V+1):
print(find_parent(parent,v),end=" ")
print()
for v in range(1,V+1):
print(parent[v],end=" ")
print()