PS/Python
[백준] 1707 - 이분 그래프 (파이썬, Python)
w00se
2021. 8. 26. 01:30
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)
읽어 주셔서 감사합니다 :)
틀린 부분이 있다면 댓글로 편히 알려주세요😊