본문 바로가기

알고리즘/백준

유니온파인드를 이용한 사이클 판별

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)

def find_parent(x):
    if parent[x] != x:
        parent[x] = find_parent(parent[x])

    return parent[x]

def union_parent(a, b):
    a = find_parent(a)
    b = find_parent(b)

    if a < b:
        parent[b] = a

    else:
        parent[a] = b

v, e = map(int, input().split())

parent = [i for i in range(v+1)]
cycle = False

for i in range(e):
    a, b = map(int, input().split())
    if find_parent(a) == find_parent(b):
        cycle = True
        break
    else:
        union_parent(a, b)

if cycle:
    print("사이클 발생o")
else:
    print("사이클 발생x")

'알고리즘 > 백준' 카테고리의 다른 글

위상정렬  (1) 2024.01.27
[백준]2252 줄세우기(Python)  (0) 2024.01.27
[백준]2887 행성 터널(Python)  (0) 2024.01.25
[백준]1647 도시 분할 계획(Python)  (2) 2024.01.25
[백준]1197 최소 스패닝 트리(Python)  (0) 2024.01.24