πŸ—οΈ Algorithm/🟩 λ°±μ€€

🟩 [λ°±μ€€] [Python] [Gold5] 1717번_μ§‘ν•©μ˜ ν‘œν˜„

Dbswnstjd 2023. 3. 10. 00:14

문제

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

 

1717번: μ§‘ν•©μ˜ ν‘œν˜„

μ΄ˆκΈ°μ— $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 μžˆλ‹€. 여기에 합집합 μ—°μ‚°κ³Ό, 두 μ›μ†Œκ°€ 같은 집합에 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€λ₯Ό ν™•μΈν•˜λŠ” 연산을 μˆ˜ν–‰ν•˜λ €κ³  ν•œλ‹€. 집합을 ν‘œν˜„ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘

www.acmicpc.net

풀이

# λ°±μ€€ 1717번 문제 - μ§‘ν•©μ˜ ν‘œν˜„
import sys
sys.setrecursionlimit(1000000)
input = sys.stdin.readline
n, m = map(int, input().split())
parent = [i for i in range(n+1)]

def find_parent(x):
    if parent[x] == x:
        return parent[x]
    parent[x] = find_parent(parent[x])
    return parent[x]

def union_parent(a, b):
    a = find_parent(a)
    b = find_parent(b)
    if a < b:
        parent[b] = a
    else:
        parent[a] = b
    
for _ in range(m):
    op, a, b = map(int, input().split())
    if op == 1:
        if find_parent(a) == find_parent(b):
            print('YES')
        else:
            print('NO')
    else:
        union_parent(a, b)

Union-find μ•Œκ³ λ¦¬μ¦˜ μ‚¬μš©ν•˜μ—¬ ν’€ 수 μžˆλŠ” λ¬Έμ œμ˜€λ‹€.