[ Python ] 서로소 집합 자료구조

seochang2·2022년 12월 6일
0

알고리즘

목록 보기
5/8

서로소 집합

공통 원소가 없는 두 집합을 의미한다.

서로소 집합 자료구조

서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조

  • 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()
profile
개발 기록

0개의 댓글