https://www.acmicpc.net/problem/13265
import sys
from collections import deque
# with open("./data.txt", "r") as file:
# def input():
# return file.readline().strip()
def input():
return sys.stdin.readline()
def bfs(node):
Q = deque()
Q.append(node)
colors[node] = 0
while Q:
a = Q.popleft()
for b in maps[a]:
# 연결
if(colors[b] == -1):
Q.append(b)
colors[b] = 1 - colors[a]
# 연결된 노드인데 현재 노드와 같은 색상이라면
# 인접리스트가 아님
if(colors[b] != -1 and colors[b] == colors[a]):
return False
return True
T = int(input())
# 테스트 케이스 개수만큼 반복
for _ in range(T):
n, m = map(int, input().split(" "))
result = []
# 인접 리스트
maps = [[] for _ in range(n + 1)]
colors = [-1] * (n + 1)
# 동그라미 연결
for _ in range(m):
x, y = map(int, input().split(" "))
maps[x].append(y)
maps[y].append(x)
# 동그라미 색칠
for i in range(1, n+1):
if(colors[i] == -1):
result.append(bfs(i))
if(all(result)):
print("possible")
else:
print("impossible")
이번 문제도 1707과 같이 기본적인 이분그래프 구현을 요구하는 문제같다.
큰 문제없이 푼 것 같다.
간선의 개수만큼 동그라미를 인접리스트로 서로 연결해주고
동그라미 개수만큼 돌면서 이분그래프인지 판단
all() 함수가 요긴하기 쓰이는 듯 하다.