
https://www.acmicpc.net/problem/1707
1707번: 이분 그래프
입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K(2≤K≤5)가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V(1≤V≤20,000)와 간선의 개수
www.acmicpc.net
전체 코드
제출 언어: PyPy3
시간: 1216ms
from collections import deque
import sys
def bfs(adj_list):
    global adj_mat, type_arr
    que = deque([(v, 1) for v in adj_list])
    while que:
        cv, ct = que.popleft()
        type_arr[cv] = ct
        adj_list = adj_mat[cv]
        for nv in adj_list:
            if type_arr[nv] == -1:
                que.append((nv, (ct+1)%2))
            elif type_arr[nv] == ct:
                return False
                
    return True
if __name__ == "__main__":
    K = int(sys.stdin.readline().strip())
    answer_list =[]
    for _ in range(K):
        V, E = map(int, sys.stdin.readline().strip().split())
        adj_mat = [ [] for _ in range(V) ]
        type_arr = [-1] * V
        is_success = True
        for _ in range(E):
            v1, v2 = map(int, sys.stdin.readline().strip().split())
            adj_mat[v1-1].append(v2-1)
            adj_mat[v2-1].append(v1-1)
        for v1 in range(V):
            if type_arr[v1] != -1:
                continue
                
            type_arr[v1] = 0
            adj_list = adj_mat[v1]
            if len(adj_list) > 0:
                is_success = bfs(adj_list)
                if not is_success:
                    break
            
        answer = "YES" if is_success else "NO"
        answer_list.append(answer)
    for a in answer_list:
        print(a)읽어 주셔서 감사합니다 :)
틀린 부분이 있다면 댓글로 편히 알려주세요😊
'PS > Python' 카테고리의 다른 글
| [Programmers] 거리두기 확인하기 (파이썬, Python) (0) | 2021.08.27 | 
|---|---|
| [백준] 17086 - 아기 상어 2 (파이썬, Python) (0) | 2021.08.27 | 
| [백준] 21608 - 상어 초등학교 (파이썬, Python) (0) | 2021.08.25 | 
| [백준] 15683 - 감시 (파이썬, Python) (0) | 2021.08.25 | 
| [Programmers] 다단계 칫솔 판매(파이썬, Python) (2) | 2021.07.24 |