[BOJ][๐ก4][๋ฐฑ์ค#01707] ์ด๋ถ ๊ทธ๋ํ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๊ทธ๋ํ์ ์ ์ ์ ์งํฉ์ ๋๋ก ๋ถํ ํ์ฌ, ๊ฐ ์งํฉ์ ์ํ ์ ์ ๋ผ๋ฆฌ๋ ์๋ก ์ธ์ ํ์ง ์๋๋ก ๋ถํ ํ ์ ์์ ๋, ๊ทธ๋ฌํ ๊ทธ๋ํ๋ฅผ ํน๋ณํ ์ด๋ถ ๊ทธ๋ํ (Bipartite Graph) ๋ผ ๋ถ๋ฅธ๋ค. ๊ทธ๋ํ๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ด ๊ทธ๋ํ๊ฐ ์ด๋ถ ๊ทธ๋ํ์ธ์ง ์๋์ง ํ๋ณํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ๊ตฌ์ฑ๋์ด ์๋๋ฐ, ์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ K๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ ๊ทธ๋ํ์ ์ ์ ์ ๊ฐ์ V์ ๊ฐ์ ์ ๊ฐ์ E๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๊ฐ ์ ์ ์๋ 1๋ถํฐ V๊น์ง ์ฐจ๋ก๋ก ๋ฒํธ๊ฐ ๋ถ์ด ์๋ค. ์ด์ด์ ๋์งธ ์ค๋ถํฐ E๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ์ ์ ๋ํ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋๋ฐ, ๊ฐ ์ค์ ์ธ์ ํ ๋ ์ ์ ์ ๋ฒํธ u, v (u โ v)๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค.ย
์ถ๋ ฅ
K๊ฐ์ ์ค์ ๊ฑธ์ณ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๊ทธ๋ํ๊ฐ ์ด๋ถ ๊ทธ๋ํ์ด๋ฉด YES, ์๋๋ฉด NO๋ฅผ ์์๋๋ก ์ถ๋ ฅํ๋ค.
์ ํ
2 โค K โค 5 1 โค V โค 20,000 1 โค E โค 200,000
์์
์ ๋ ฅ
2
3 2
1 3
2 3
4 4
1 2
2 3
3 4
4 2
์ถ๋ ฅ
YES
NO
My Sol
import sys
input = sys.stdin.readline
from collections import deque
def check():
V, E = map(int, input().split())
D = [2] * V
G = [[] for _ in range(V)]
for _ in range(E):
u, v = map(int, input().split())
G[u-1].append(v-1)
G[v-1].append(u-1)
for s in range(V):
if D[s]==2:
Q = deque()
Q.append(s)
D[s] = 0
ql = 1
cnt = 1
while Q:
for _ in range(ql):
u = Q.popleft()
ql -= 1
for v in G[u]:
# v ๊ฐ์ด ์ด๊ธฐ๊ฐ์ธ 2์ผ ๋
if D[v]==2:
D[v] = cnt
Q.append(v)
ql += 1
continue
# D[v] ๊ฐ์ด cnt์ ๊ฐ๋ค๋ฉด 'False' return
if D[v]==cnt^1:
return 'NO'
cnt ^= 1
return 'YES'
T = int(input())
for _ in range(T):
print(check())
์ด๋ถ ๊ทธ๋ํ?
์ด๋ถ๊ทธ๋ํ์ ๊ฐ๋ ์ ์ฒ์ ์๊ฒ ๋ ๋ฌธ์ ์๋ค. ์ด๋ถ๊ทธ๋ํ์ ๋ํ ๋ฌธ์ ์ ์ค๋ช ์ด ๊ฐ๊ฒฐํ๊ณ ํจ์ถ๋์ด ์์ด ์ดํด๋ฅผ ํ์ง ๋ชปํด ๊ฒ์์ ํตํด ๊ฐ๋ ์ ์๊ฒ ๋์๋ค. ์๋ฅผ ๋ค์ด ์ด๋ค ์ ์ ์ ํ๋์์ผ๋ก ์น ํ ๋, ํด๋น ์ ์ ๊ณผ ์ธ์ ํ ์ ์ ์ ๋นจ๊ฐ์์ผ๋ก ์น ํด๋๊ฐ๋ค. ์ด๋ ๊ฒ ๋ชจ๋ ์ ์ ์ ๋นจ๊ฐ์๊ณผ ํ๋์์ผ๋ก ์น ํด๊ฐ๋ ๊ณผ์ ์์ ์ด๋ค ํ๋์ ์ ์ ์ ์ธ์ ํ ์ ์ ์ด ์ด๋ฏธ ํ๋์์ผ๋ก ์์น ๋์๋ค๋ฉด, ์ด๋ ์ด๋ถ ๊ทธ๋ํ๊ฐ ์๋ ๊ฒ์ด๋ค.
ํ์ด
์์์์ ๋นจ๊ฐ์๊ณผ ํ๋์์ ๊ฐ๊ฐ 0๊ณผ 1๋ก ์ฒดํฌํ์๊ณ , ๊ทธ๋์ ์ด๊ธฐํ๋ฅผ 2๋ก ํ์๋ค. 1๊ณผ 0์ ๋ฐ์ ์ ๋นํธ๋ฅผ ์ด์ฉํ์์ผ๋ฉฐ, BFS ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. for๋ฌธ์ ์ด์ฉํด 0๋ถํฐ V-1๊น์ง์ ์ ์ ๋ฒํธ v์ ๋ํด D[v]๊ฐ 2๋ผ๋ฉด, ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด๋ฏ๋ก BFS๋ฅผ ๋๋ ค์ฃผ๋๋ฐ, BFS๋ ์์ ๋ฐฉ์๋๋ก ์ ์ ์ด 2๋ผ๋ฉด ํด๋น level์ cnt๋ฅผ ์ ๋ ฅํด์ฃผ๊ณ , Q์ ๋ค์ ๋ฃ๋ ๊ฒ์ด๊ณ , 2์ด ์๋ ์ฒดํฌ๋ ์ ์ ์ด๋ผ๋ฉด ์ ์ ๊ณผ ๊ฐ์ ์ฒดํฌ๊ฐ ์๋์ง ํ์ธํ์ฌ ๊ฐ์ ์ฒดํฌ๋ผ๋ฉด ๋ฐ๋ก NO๋ฅผ ๋ฐํํด ์ถ๋ ฅํ๋๋ก ํ๋ค.
์ฒ์์ ์ฑ์ ์งํ ์ค์ ํ๋ฆฌ๊ณ ๋ง์๋๋ฐ, ์ด๋ ๋ชจ๋ ์ ์ ์ด ์ด์ด์ ธ์๋ ์ฐ๊ฒฐ ๊ทธ๋ํ๋ผ๊ณ ์ค์ธํ๋ ์ ์์ ๋ฐ์ํ ์ค๋ฅํ๋ค. ๋จ์ํ ์์์ ์ 0์ผ๋ก ํ๋ฉด ๋ชจ๋ ์ ์ ์ ์ฒดํฌํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ , ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด for๋ฌธ์ ์ด์ฉํด ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์์ ๋ค์ BFS๋ฅผ ๋๋ ค์ฃผ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ