[알고리즘] 백준 1707 이분 그래프

CHOI IN HO·2024년 1월 24일
0

코딩테스트

목록 보기
42/74

풀이

처음 본 이 문제는 나에게 매우 까다로운 문제였다. 풀이 방법은 bfs로 돌면서 본인과 연결되어 있는 노드에 대해서 다른 그룹으로 지정해주고, 돌다가 본인과 연결되어 있는데 같은 그룹으로 속해있으면 False를 반환해주면 된다.

from collections import deque
import sys
k = int(input())
for test_case in range(k):
    V, E = map(int, sys.stdin.readline().split())

    lst = [[] for _ in range(V+1)]
    for i in range(E):
        u, v = map(int, sys.stdin.readline().split())
        lst[u].append(v)
        lst[v].append(u)

    visited = [False] * (V+1)
    grp = [0] * (V+1)
    result = True
    def bfs(start):
        global result
        q = deque()
        q.append(start)
        visited[start] = True
        while q:
            current = q.popleft()
            for k in lst[current]:
                if not visited[k]:
                    visited[k] = True
                    grp[k] = 3-grp[current]
                    q.append(k)
                else:
                    if grp[current] == grp[k]:
                        result = False
                        return

    for i in range(1, V+1):
        bfs(i)
        if result == False:
            break

    if result == False:
        print('NO')
    else: print('YES')
profile
개발자기 되기 위해선 무엇이든!

0개의 댓글