From 5ef5c78108dd075539706214b6eec18912dbe7b1 Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Thu, 27 Feb 2025 11:00:47 +0900 Subject: [PATCH] =?UTF-8?q?[Gold=20IV]=20Title:=20=EC=9D=B4=EB=B6=84=20?= =?UTF-8?q?=EA=B7=B8=EB=9E=98=ED=94=84,=20Time:=201612=20ms,=20Memory:=206?= =?UTF-8?q?0052=20KB=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 백준/Gold/1707. 이분 그래프/README.md | 30 +++++++++++++++ 백준/Gold/1707. 이분 그래프/이분 그래프.py | 44 ++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 백준/Gold/1707. 이분 그래프/README.md create mode 100644 백준/Gold/1707. 이분 그래프/이분 그래프.py diff --git a/백준/Gold/1707. 이분 그래프/README.md b/백준/Gold/1707. 이분 그래프/README.md new file mode 100644 index 0000000..8074700 --- /dev/null +++ b/백준/Gold/1707. 이분 그래프/README.md @@ -0,0 +1,30 @@ +# [Gold IV] 이분 그래프 - 1707 + +[문제 링크](https://www.acmicpc.net/problem/1707) + +### 성능 요약 + +메모리: 60052 KB, 시간: 1612 ms + +### 분류 + +너비 우선 탐색, 이분 그래프, 깊이 우선 탐색, 그래프 이론, 그래프 탐색 + +### 제출 일자 + +2025년 2월 27일 11:00:37 + +### 문제 설명 + +
그래프의 정점의 집합을 둘로 분할하여, 각 집합에 속한 정점끼리는 서로 인접하지 않도록 분할할 수 있을 때, 그러한 그래프를 특별히 이분 그래프 (Bipartite Graph) 라 부른다.
+ +그래프가 입력으로 주어졌을 때, 이 그래프가 이분 그래프인지 아닌지 판별하는 프로그램을 작성하시오.
+ +### 입력 + +입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 두고 순서대로 주어진다. 각 정점에는 1부터 V까지 차례로 번호가 붙어 있다. 이어서 둘째 줄부터 E개의 줄에 걸쳐 간선에 대한 정보가 주어지는데, 각 줄에 인접한 두 정점의 번호 u, v (u ≠ v)가 빈 칸을 사이에 두고 주어진다.
+ +### 출력 + +K개의 줄에 걸쳐 입력으로 주어진 그래프가 이분 그래프이면 YES, 아니면 NO를 순서대로 출력한다.
+ diff --git a/백준/Gold/1707. 이분 그래프/이분 그래프.py b/백준/Gold/1707. 이분 그래프/이분 그래프.py new file mode 100644 index 0000000..bf96226 --- /dev/null +++ b/백준/Gold/1707. 이분 그래프/이분 그래프.py @@ -0,0 +1,44 @@ +import sys +import math +from collections import deque +from collections import defaultdict + +sys.setrecursionlimit(10**6) + +input = sys.stdin.readline +IsEven = True + +def DFS(start, graph): + global IsEven + visited[start] = True + for neighbor in graph[start]: + if not visited[neighbor]: + check[neighbor] = (check[start]+1) %2 + DFS(neighbor, graph) + elif (check[neighbor] == check[start]): + IsEven = False + + + + +K = int(input()) +for i in range(K): + V, E = map(int, input().split()) + graph = defaultdict(list) + visited = [False] * 200001 + check = [0] * (V+1) + for j in range(E): + e1, e2 = map(int, input().split()) + graph[e1].append(e2) + graph[e2].append(e1) + for i in range(1, V+1): + if IsEven: + DFS(i, graph) + else: + break + if(IsEven): + print("YES") + else: + print("NO") + IsEven = True +