https://www.acmicpc.net/problem/17834
17834번: 사자와 토끼
사자와 토끼는 전국적으로 인기를 끌고 있는 재밌는 보드게임이다. 사자와 토끼를 즐기기 위해서는 2명의 플레이어와 1명의 심판이 필요하다. 보드판은 N개의 수풀과 M개의 오솔길로 이루어져
www.acmicpc.net
그래프를 홀짝으로 칠해보는 것이 핵심인 문제입니다.
BFS나 DFS를 이용하여 해결할 수 있습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] odd = new int[N + 1];
int[] even = new int[N + 1];
ArrayList<Integer>[] list = new ArrayList[N + 1];
for (int i = 1; i <= N; i++) {
list[i] = new ArrayList<>();
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
list[a].add(b);
list[b].add(a);
} // end of input
Queue<Integer> q = new LinkedList<>();
q.offer(1);
odd[1] = 1;
int time = 0;
while(!q.isEmpty()) {
time++;
int size = q.size();
while(size-- > 0) {
int now = q.poll();
for (int a : list[now]) {
if(time % 2 == 0 && odd[a] == 0) {
odd[a] = time + 1;
q.offer(a);
} else if(time % 2 == 1 && even[a] == 0){
even[a] = time + 1;
q.offer(a);
}
}
}
}
int cntEven = 0;
int cntOdd = 0;
for (int i = 1; i <= N; i++) {
if(even[i] == 0) cntEven++;
else cntOdd++;
}
System.out.println(2 * cntEven * cntOdd);
}
}
'OJ' 카테고리의 다른 글
[BOJ] 16441 아기돼지와 늑대 (JAVA) (0) | 2022.12.23 |
---|---|
[BOJ] 23254 나는 기말고사형 인간이야 (JAVA) (2) | 2022.12.22 |
[BOJ] 1600 말이 되고픈 원숭이 (JAVA) (0) | 2022.12.13 |
[BOJ] 1743 음식물 피하기 (JAVA) (3) | 2022.12.11 |
[BOJ] 1194 달이 차오른다, 가자. (JAVA) (2) | 2022.10.07 |