알고리즘
[알고리즘] 백준 1707 이분 그래프
j9972
2022. 8. 7. 16:04
728x90
문제
접근
1. 테스트 케이스 안에서 노드의 개수와 간선의 개수를 받아야 하므로, 테스트 케이스 반복문 안에서 실행한다
2. 방문하는 곳이 그 전의 방문해서 나온 값이랑 같다면 노드끼리 간선에 의해 연결됨을 알 수 있으므로 break 해야한다
3. dfs함수에서 연결됨을 group으로 묶어서 판단하고 방문하지 않았으면 다른 그룹으로 판단하면 된다
풀이
import sys
sys.setrecursionlimit(10**9)
input = sys.stdin.readline
k = int(input())
for _ in range(k):
n, m = map(int, input().split())
board = [[] for _ in range(n + 1)]
visited = [False] * (n + 1)
res = False
for _ in range(m):
a, b = map(int, input().split())
board[a].append(b)
board[b].append(a)
def dfs(start, group):
global res
if res == True:
return
visited[start] = group # 같은 그룹 선정
for i in board[start]:
if not visited[i]:
dfs(i, -group) # 다른 그룹
elif visited[start] == visited[i]:
res = True
return
for i in range(1, n+1):
if not visited[i]:
dfs(i, 1)
if res:
break
if res == True:
print("NO")
else:
print("YES")