본문 바로가기
알고리즘/BOJ

[Python] 백준 20040번: 사이클 게임

by PIAI 2021. 10. 6.

https://www.acmicpc.net/problem/20040

 

20040번: 사이클 게임

사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한

www.acmicpc.net

1. 플레이어 순서는 중요하지 않고 사이클이 발생하는 시점이 중요하다.

2. 사이클이 발생한다는것은 즉 두 노드의 부모가 같다는 뜻이다.

3. 이미 정답이 나왔으면 더이상 실행할 필요가 없다.

ans = 0
n, m = map(int, input().split())
unf = [i for i in range(n)]

def find(x):
    if x == unf[x]:
        return x
    unf[x] = find(unf[x])
    return unf[x]


def union(x, y):
    global i, ans
    x = find(x)
    y = find(y)
    if x == y:
        ans = i + 1
    else:
        if x < y:
            unf[y] = x
        else:
            unf[x] = y

for i in range(m):
    x, y = map(int, sys.stdin.readline().split())
    if not ans:
        union(x, y)

print(ans)

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

[Python] 백준 4811번: 알약  (0) 2021.10.07
[Python] 백준 2056번: 작업  (0) 2021.10.06
[Python] 백준 9084 동전  (0) 2021.10.05
[Python] 백준 7579: 앱  (0) 2021.10.04
[Python] 백준 5582: 공통 부분 문자열  (0) 2021.10.04

댓글