PS/Baekjoon

[λ°±μ€€] 1717. μ§‘ν•©μ˜ ν‘œν˜„ (Python)

gimewn 2022. 10. 28. 17:15

link πŸ”— 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

 

πŸ’¬ μœ λ‹ˆμ˜¨ νŒŒμΈλ“œ 문제!

πŸ’¬ μœ λ‹ˆμ˜¨ νŒŒμΈλ“œλ₯Ό μ˜€λžœλ§Œμ— ν’€μ–΄μ„œ, κ°œλ…λΆ€ν„° λ‹€μ‹œ 봐야 ν–ˆλ‹€γ… γ… 

πŸ’¬ type이 1일 경우 union ν•¨μˆ˜ λ‚΄μ—μ„œ YES ν˜Ήμ€ NOλ₯Ό κ΅¬λΆ„ν•œλ‹€.

 

import sys
input = sys.stdin.readline

def find(n):
    if parents[n] == n:
        return n
    parents[n] = find(parents[n])
    return parents[n]

def union(type, n1, n2):
    fn1 = find(n1)
    fn2 = find(n2)
    if type == 1:
        if fn1 == fn2:
            print("YES")
        else:
            print("NO")
    else:
        parents[fn2] = fn1

N, M = map(int, input().split())

parents = [num for num in range(N+1)]

for _ in range(M):
    type, num1, num2 = map(int, input().split())
    union(type, num1, num2)