개미의 개열시미 프로그래밍

[알고리즘] 백준20040 사이클 게임 - 파이썬 본문

알고리즘/유니온 파인드, 최소 신장 트리(크루스칼)

[알고리즘] 백준20040 사이클 게임 - 파이썬

YunHyeok 2021. 9. 10. 15:44
728x90
반응형

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

 

20040번: 사이클 게임

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

www.acmicpc.net

 

 

[풀이 코드]

from sys import stdin

input = stdin.readline

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

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

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

    if a < b:
        parent[b] = a
    else:
        parent[a] =b

flag = True

for i in range(m):
    x, y = map(int, input().split())

    if find_parent(parent, x) == find_parent(parent, y):
        print(i+1)
        flag = False
        break
    else:
        union_parent(parent, x, y)

if flag:
    print(0)

 

- 문제를 이해하는데 오래 걸렸지만 결국 사이클을 확인하는 유니온 파인드 문제였다. find함수와 union함수는 이전 문제들과 같이 작성했다.

 

728x90
반응형
Comments