백준 20040 - 사이클 게임 (파이썬)

Updated:

입력되는 점들마다 find연산을 해서 부모가 같은지 확인해서 해결했습니다.
입력된 두개의 점들의 부모가 같다면 이미 연결되어 있는 상태이므로 사이클이 발생합니다.

import sys

sys.setrecursionlimit(10 ** 9)
input = sys.stdin.readline

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

    return parent[x]

def union(x, y):
    global flag
    
    x = find(x)
    y = find(y)

    if x > y:
        parent[y] = x
    elif x < y:
        parent[x] = y
    else:
        flag = True

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

for i in range(1, m + 1):
    a, b = map(int, input().split())
    union(a, b)

    if flag:
        print(i)
        break

if not flag:
    print(0)

Categories:

Updated: