티스토리 뷰

728x90

문제

www.acmicpc.net/problem/1717

 

1717번: 집합의 표현

첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는

www.acmicpc.net

유니온 파인드 문제이다.

유니온 파인드에 대해 이해가 가지 않는다면 ,

jainn.tistory.com/87

 

유니온 파인드(UNION-FIND) 파이썬 구현

유니온 파인드(Union-Find)는 트리형태를 갖는 자료구조이다. 합집합 찾기 및 상호 배타적 집합(Disjoint-set)이라고도 한다. 이름 그대로 상호 배타적인 부분 집합들로 나누어진 원소들을 저장하고

jainn.tistory.com

이 글을 보고 오면 된다!

 

 

풀이 및 소스코드

import sys
input = sys.stdin.readline
sys.setrecursionlimit(100000)
n, m = map(int, input().split())

def union(x, y):
    x = find(x)
    y = find(y)
    if x == y:
        return
    parent[x] = y
    return
    
def find(x):
    if parent[x] == x:
        return x
    parent[x]=find(parent[x])
    return parent[x]

parent = [0]*(n+1)
for i in range(n+1):
    parent[i] = i

for i in range(m):
    x, a, b = map(int, input().split())
    if x == 0:
        union(a,b)
    else:
        pa = find(a)
        pb = find(b)
        if pa == pb:
            print('YES')
        else:
            print('NO')
반응형