문제풀이/그래프

[파이썬] [그래프] 백준 1717 집합의 표현

승무_ 2022. 2. 7. 16:56

문제

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

코드

import sys
sys.setrecursionlimit(1000000)
input=sys.stdin.readline

def find(x):
    if parent[x]!=x:
        parent[x]=find(parent[x])
    return parent[x]

def union(b,c):
    b=find(b)
    c=find(c)

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


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

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

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

생각 정리

기본적인 union-find 문제이다