백준 20040 사이클 게임 python

청천·2022년 11월 8일
0

백준

목록 보기
36/41

문제 링크: 사이클 게임
문제 해설
싸이클을 이루게 하는 지점을 찾는 문제
Union Find로 싸이클을 이루는 지 계속 체크


import sys; input = lambda: sys.stdin.readline().rstrip()

def find_parent(x):
    if parents[x] != x:
        parents[x] = find_parent(parents[x])
    return parents[x]

def union_parent(a, b, idx):
    global ans
    a = find_parent(a)
    b = find_parent(b)
    if a < b:
        parents[b] = a
    elif a > b:
        parents[a] = b
    else:
        ans = idx


N, M = map(int, input().split())
parents = [i for i in range(N)]
# 싸이클을 만드는 지점
ans = 0
# 1번 부터 시작
for i in range(1, M+1):
    # 싸이클을 이루었다면 탈출
    if ans != 0: break
    a, b = map(int, input().split())
    union_parent(a, b, i)
print(ans)

0개의 댓글