SSONG Cloud
[백준] 20040 사이클 게임 본문
반응형
문제 출처: www.acmicpc.net/problem/20040
20040번: 사이클 게임
사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한
www.acmicpc.net
: 주어진 경로를 이어가면서 사이클이 발생한다면 몇번째에서 발생하는지 발생하지 않으면 0을 출력할 수 있도록 한다.
: 유니온 파인드 알고리즘을 통해 풀 수 있고, union 메소드가 boolean 값을 반환하기 때문에 사이클이 발생하면 그 즉시 중단할 수 있도록 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder sb = new StringBuilder();
static StringTokenizer st;
static int[] p;
static int N;
private static void make() {
for(int i = 0; i < N; i++)
p[i] = i;
}
private static int find(int idx) {
if(p[idx] == idx) return idx;
return p[idx] = find(p[idx]);
}
private static boolean union(int a, int b) {
int aRoot = find(a);
int bRoot = find(b);
if(aRoot == bRoot) return false;
p[bRoot] = aRoot;
return true;
}
public static void main(String[] args) throws IOException {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
p = new int[N];
make();
int ans = 0;
for(int i = 1; i < K+1; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if(!union(a, b)) {
ans = i;
break;
}
}
System.out.println(ans);
}
}
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준] 2565 전깃줄 (0) | 2021.03.29 |
---|---|
[백준] 16236 아기 상어 (0) | 2021.03.28 |
[백준] 4386 별자리 만들기 (0) | 2021.03.28 |
[백준] 2644 촌수계산 (0) | 2021.03.27 |
[백준] 9205 맥주 마시면서 걸어가기 (0) | 2021.03.27 |
Comments