유니온 파인드 알고리즘 (백준 1717: 집합의 표현)

2024. 2. 3. 01:18·프로그래밍

https://www.acmicpc.net/problem/1717

 

1717번: 집합의 표현

초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작

www.acmicpc.net

 

파이썬으로 아래와 같이 작성했다.

 

import sys
sys.setrecursionlimit(10**6)
input=sys.stdin.readline

n, m = map(int, input().split())

# 노드의 부모 노드를 저장하는 배열
# 최초 각 노드의 부모는 자기 자신
parent = [i for i in range(n+1)]

# 각 노드의 랭크를 저장하는 배열
rank = [0] * (n+1)

def find(x):
    # 경로 압축: 루트 노드를 찾을 때까지 부모 노드를 따라 이동하며 부모 노드를 업데이트
    if parent[x] != x:
        parent[x] = find(parent[x])
    return parent[x]

def union(x, y):
    # 루트 노드 찾기
    x_root = find(x)
    y_root = find(y)

    # 이미 같은 집합에 속한 경우
    if x_root == y_root:
        return

    # 랭크 기반 합집: 랭크가 낮은 노드의 루트 노드를 랭크가 높은 노드의 루트 노드의 자식으로 만듭니다.
    if rank[x_root] < rank[y_root]:
        parent[x_root] = y_root
    else:
        parent[y_root] = x_root
        # 랭크가 같으면 합쳐진 집합의 랭크를 1 증가
        if rank[x_root] == rank[y_root]:
            rank[x_root] += 1

for _ in range(m):
    o, a, b = map(int, input().split())
    if o == 0:
        union(a, b)
    elif o == 1:
        if find(a) == find(b):
            print("YES")
        else:
            print("NO")


'''
예제 입력
7 8
0 1 3
1 1 7
0 7 6
1 7 1
0 3 7
0 4 2
0 1 1
1 1 1

예제 출력
NO
NO
YES
'''

'프로그래밍' 카테고리의 다른 글

BFS 알고리즘 (백준 2021번: 최소 환승 경로)  (0) 2024.08.02
다익스트라 알고리즘 (백준 1753번: 최단경로)  (0) 2024.01.23
공간이 연속 할 경우 합치기  (0) 2024.01.22
DFS/BFS 구현 시 큐에 넣기 전에 방문 처리 할 것  (0) 2024.01.10
파이썬3의 딕셔너리의 keys() 메서드 반환 값은 리스트가 아니야.  (0) 2024.01.08
'프로그래밍' 카테고리의 다른 글
  • BFS 알고리즘 (백준 2021번: 최소 환승 경로)
  • 다익스트라 알고리즘 (백준 1753번: 최단경로)
  • 공간이 연속 할 경우 합치기
  • DFS/BFS 구현 시 큐에 넣기 전에 방문 처리 할 것
virbr0.net
virbr0.net
  • virbr0.net
    virbr0.net
    virbr0.net
  • 전체
    오늘
    어제
    • 분류 전체보기
      • SIP
      • HTTP
      • OS
      • 프로그래밍
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SBC
    인터넷전화
    chunked
    alteon
    IIS
    해외발신
    파일명 없이 다운로드
    ADC
    다익스트라
    회사생활
    파일명
    브로드웍스
    시간복잡도
    인증서
    rtp inject
    유기농 배추
    가상화
    HTTP
    파이썬
    딕셔너리
    윈도우서버
    셀프칭찬
    RTP
    URL Rewrite
    최단경로
    RDP
    DFS
    SIP
    클라우드
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
virbr0.net
유니온 파인드 알고리즘 (백준 1717: 집합의 표현)
상단으로

티스토리툴바