알고리즘/백준

[백준] 1717번 집합의 표현 (파이썬)

알감자 2022. 1. 6. 20:14
 

1717번: 집합의 표현

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

www.acmicpc.net

 

 

코드

import sys
sys. setrecursionlimit(10**6)

n, m = map(int, sys.stdin.readline().split(" "))
li = [0] * (n+1)
answer_li = []

for i in range(n+1):
    li[i] = i

def find(a):
    if a == li[a]:
        return a
    p = find(li[a])
    li[a] = p
    return p

def union(x,y):
    a = find(x)
    b = find(y)

    if a == b:
        return
    li[max(a,b)] = min(a,b)


for _ in range(m):
    u, a, b = map(int, sys.stdin.readline().split(" "))
    if u == 0:
        union(a,b)
    else:
        if find(a) == find(b):
            answer_li.append("YES")
        else:
            answer_li.append("NO")

for i in range(len(answer_li)):
    print(answer_li[i])