개미의 개열시미 프로그래밍

[알고리즘] 백준1717 집합의 표현 - 파이썬 본문

알고리즘/유니온 파인드, 최소 신장 트리(크루스칼)

[알고리즘] 백준1717 집합의 표현 - 파이썬

YunHyeok 2021. 9. 8. 00:48
728x90
반응형

https://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

 

 

[풀이 코드]

from sys import stdin
import sys
sys.setrecursionlimit(100000)

input = stdin.readline

n, m = map(int, input().split())
parent = [i for i in range(n+1)]

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 = find_parent(parent, a)
    b = find_parent(parent, b)

    if a < b:
        parent[b] = a
    else:
        parent[a] = b

for _ in range(m):

    k, a, b = map(int, input().split())

    if k == 1:
        if find_parent(parent, a) == find_parent(parent, b):
            print("YES")
        else:
            print("NO")

    else:
        union_parent(parent, a, b)

- 단계별 풀기 "유니온 파인드"의 첫 번째 문제라 그런지 이코테에서 들었던 강의 알고리즘을 거의 그대로 쓰면 답이 되는 문제였다. 

 

- sys.setrecursionlimit를 넣어줘야 런타임 에러가 안 뜬다! 

728x90
반응형
Comments