[백준 1707번] 이분 그래프

2025. 5. 5. 19:46·알고리즘
728x90
반응형

우선 이분 그래프가 정확히 뭔지 몰라 헷갈렸다.

 

이분 그래프란?

  • 모든 정점을 두 가지 색으로 표현
  • 인접한 정점을 연결할 때에는 무조건 다른 색상의 것을 연결

 

 

처음에 문제를 풀 때 단순하게 싸이클 여부만 판단해서 풀었는데 6%에서 실패했다. 해당 그래프는 각각 독립적으로 두 개가 존재할 수도 있기 때문에 이러한 부분도 고려해야 한다.

 

 

 

import java.util.*;
import java.io.*;

public class BOJ_G4_1707_이분그래프 {
	static int[] p;
	static List<Integer>[] graphs;
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st = null;

		int K = Integer.parseInt(br.readLine());

		int V, E;
		while (K-- > 0) {
			st = new StringTokenizer(br.readLine());

			V = Integer.parseInt(st.nextToken());
			E = Integer.parseInt(st.nextToken());

			p = new int[V + 1];

			graphs = new List[V + 1];
			for (int i = 0; i < V + 1; i++) {
				graphs[i] = new ArrayList<>();
			}

			int a, b;
			for (int i = 0; i < E; i++) {
				st = new StringTokenizer(br.readLine());
				a = Integer.parseInt(st.nextToken());
				b = Integer.parseInt(st.nextToken());

				graphs[a].add(b);
				graphs[b].add(a);
			}

			boolean flag = false;
			for (int i = 1; i < V + 1; i++) {
				if (p[i] != 0) continue;
				if(!BFS(i)) {
					flag = true;
					break;
				}
			}
			if (!flag) sb.append("YES\n");
			else sb.append("NO\n");
		}


		System.out.println(sb);


	}

	static boolean BFS(int start) {
		ArrayDeque<Integer> q = new ArrayDeque<>();
		p[start] = 1;
		q.offer(start);

		while (!q.isEmpty()) {

			int curr = q.poll();

			for (Integer next : graphs[curr]) {
				if (p[next] == 0) {
					p[next] = -p[curr];
					q.offer(next);
				} else if (p[next] == p[curr]){
					return false;
				}
			}
		}

		return true;
	}
}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

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

[백준 1027번] 고층 건물  (0) 2025.05.07
[백준 2629번] 양팔저울  (0) 2025.05.06
[백준 7512번] 연속하는 소수의 합  (0) 2025.05.04
[백준 2504번] 괄호의 값  (0) 2025.04.30
[백준 18808번] 스티커 붙이기 C++  (0) 2023.12.25
'알고리즘' 카테고리의 다른 글
  • [백준 1027번] 고층 건물
  • [백준 2629번] 양팔저울
  • [백준 7512번] 연속하는 소수의 합
  • [백준 2504번] 괄호의 값
moongi
moongi
프로그래밍 관련 공부를 정리하는 블로그
  • moongi
    By_Me
    moongi
  • 전체
    오늘
    어제
    • 공부 (66) N
      • 알고리즘 (34) N
        • 기업별 유사 문제 (2)
        • Sudo Code (4)
        • 예외처리 (1)
        • SQL (5)
      • spring boot (6)
        • jpa (0)
        • querydsl (0)
        • MVC pattern (0)
        • setting (2)
      • 취준 (6)
      • CS (8)
        • 디자인패턴 (1)
        • 데이터베이스 (4)
        • 네트워크 (3)
        • 운영체제 (0)
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
moongi
[백준 1707번] 이분 그래프
상단으로

티스토리툴바