๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Problem Solving

[Java] ๋ฐฑ์ค€ 1707 - ์ด๋ถ„ ๊ทธ๋ž˜ํ”„

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


ํ’€์ด

๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค 1๊ณผ -1์„ ๋ฒˆ๊ฐˆ์•„ ๋งค๊ธฐ๋ฉด์„œ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ (BFS/DFS):

1์ด ๋“ค์–ด๊ฐ€์•ผํ•  ๋…ธ๋“œ์— ์ด๋ฏธ -1์ด ๋“ค์–ด๊ฐ€์žˆ์œผ๋ฉด NO

-1์ด ๋“ค์–ด๊ฐ€์•ผํ•  ๋…ธ๋“œ์— ์ด๋ฏธ 1์ด ๋“ค์–ด๊ฐ€์žˆ์œผ๋ฉด NO

๋ณ„ ๋ฌธ์ œ์—†์ด ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด YES


์ฝ”๋“œ

๋”๋ณด๊ธฐ
import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int K = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();

		outerLoop: 
        	while (K-- > 0) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int V = Integer.parseInt(st.nextToken());
			int E = Integer.parseInt(st.nextToken());
			ArrayList<ArrayList<Integer>> edges = new ArrayList<>();

			for (int i = 0; i < V + 1; i++) {
				edges.add(new ArrayList<>());
			}
			for (int i = 0; i < E; i++) {
				st = new StringTokenizer(br.readLine());
				int u = Integer.parseInt(st.nextToken());
				int v = Integer.parseInt(st.nextToken());
				edges.get(u).add(v);
				edges.get(v).add(u);
			}

			int[] color = new int[V + 1];

			for (int i = 1; i <= V; i++) {
				if (color[i] == 0) {
					color[i] = 1;

					Queue<Integer> que = new LinkedList<>();
					que.add(i);

					while (!que.isEmpty()) {
						int cur = que.remove();

						for (int dest : edges.get(cur)) {
							if (color[dest] == color[cur]) {
								sb.append("NO\n");
								continue outerLoop;
							}

							if (color[dest] == 0) {
								color[dest] = color[cur] * -1;
								que.add(dest);
							}
						}
					}
				}
			}
			sb.append("YES\n");
		}

		System.out.println(sb);
		br.close();
	}
}