문제 링크: 사이클 게임
문제 해설
싸이클을 이루게 하는 지점을 찾는 문제
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)