์ด๋ถ๊ทธ๋ํ
๋ชจ๋ ๊ผญ์ง์ ์ ๋นจ๊ฐ๊ณผ ํ๋์ผ๋ก ์์น ํ๋, ๋ชจ๋ ๋ณ์ด ๋นจ๊ฐ๊ณผ ํ๋ ๊ผญ์ง์ ์ ํฌํจํ๋๋ก ์์น ํ ์ ์๋ ๊ทธ๋ํ
์ด๋ถ ๊ทธ๋ํ์ธ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ
๋๋น ์ฐ์ ํ์(BFS), ๊น์ด ์ฐ์ ํ์(DFS)์ ์ด์ฉ → ์๋ก ์ธ์ ํ ์ ์ ์ด ๊ฐ์ ์์ด๋ฉด ์ด๋ถ ๊ทธ๋ํ X
1. BFS, DFS๋ก ํ์ํ๋ฉด์ ์ ์ ์ ๋ฐฉ๋ฌธํ ๋๋ง๋ค ๋ ๊ฐ์ง ์ ์ค ํ๋๋ฅผ ์น ํ๋ค.
2. ๋ค์ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ฉด์ ์์ ๊ณผ ์ธ์ ํ ์ ์ ์ ์์ ๊ณผ ๋ค๋ฅธ ์์ผ๋ก ์น ํ๋ค.
3. ํ์์ ์งํํ ๋ ์์ ๊ณผ ์ธ์ ํ ์ ์ ์ ์์ด ์์ ๊ณผ ๋์ผํ๋ฉด ์ด๋ถ ๊ทธ๋ํ๊ฐ ์๋๋ค.
4. BFS์ ๊ฒฝ์ฐ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ค๊ฐ ๋ง์ฝ ๊ฐ์ ๋ ๋ฒจ์์ ์ ์ ์ ๋ค๋ฅธ ์์ผ๋ก ์น ํด์ผ ํ๋ค๋ฉด ๋ฌด์กฐ๊ฑด ์ด๋ถ ๊ทธ๋ํ๊ฐ ์๋๋ค.
๋ชจ๋ ์ ์ ์ ๋ค ๋ฐฉ๋ฌธํ๋๋ฐ ์์ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด ์ด๋ถ ๊ทธ๋ํ์ด๋ค.
โป ์ด๋ ์ฃผ์ํ ์ ์ ์ฐ๊ฒฐ ๊ทธ๋ํ์ ๋น์ฐ๊ฒฐ ๊ทธ๋ํ๋ฅผ ๋ ๋ค ๊ณ ๋ ค ํด์ผํ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ํ๊ฐ ๋น์ฐ๊ฒฐ ๊ทธ๋ํ์ธ ๊ฒฝ์ฐ ๋ชจ๋ ์ ์ ์ ๋ํด์ ํ์ธํ๋ ์์
์ด ํ์ํ๋ค.
์ฐธ๊ณ : https://gmlwjd9405.github.io/2018/08/23/algorithm-bipartite-graph.html
https://www.acmicpc.net/problem/1707
์ด๋ถ ๊ทธ๋ํ ์์
from collections import deque
import sys
input = sys.stdin.readline
k = int(input())
def bfs(start):
visited[start] = 1
q = deque()
q.append(start)
while q:
a = q.popleft()
for i in graph[a]:
if visited[i] == 0:
visited[i] = -visited[a] # i์ ์ฐ๊ฒฐ๋ ์ ์ ์ -๋ก ๋ฐ๊ฟ์ค (์ด๋ถ๊ทธ๋ํ)
q.append(i)
else:
if visited[i] == visited[a]:
return False
return True
for i in range(k):
v, e = map(int, input().split())
flag = True
graph = [[] for i in range(v + 1)]
visited = [0 for i in range(v + 1)]
for j in range(e):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
for k in range(1, v + 1):
if visited[k] == 0:
if not bfs(k):
flag = False
break
print("YES" if flag else "NO")
'Algorithms > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์ด ์ฌ์ดํด (๋ฐฑ์ค 10451) (0) | 2021.10.12 |
---|---|
์ฐ๊ฒฐ์์์๊ฐ์ (๋ฐฑ์ค 11724) (0) | 2021.10.12 |
[๋ฐ์ดํฐ ๊ตฌ์กฐ] ๋ฐฐ์ด(Array)์ ์ฐ๊ฒฐ๋ฆฌ์คํธ(Linked List)๋ก ๋ฆฌ์คํธ ์ถ์์๋ฃํ ๊ตฌํ (with C) (0) | 2021.04.16 |
[๊ทธ๋ํ] ์์ ์ ๋ ฌ (0) | 2021.04.14 |
[์๊ณ ๋ฆฌ์ฆ] ๋ณต์ก๋(Complexity)์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ (0) | 2021.01.16 |