[BOJ][๐ŸŸก4][๋ฐฑ์ค€#01707] ์ด๋ถ„ ๊ทธ๋ž˜ํ”„

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #1707


๋ฌธ์ œ

๊ทธ๋ž˜ํ”„์˜ ์ •์ ์˜ ์ง‘ํ•ฉ์„ ๋‘˜๋กœ ๋ถ„ํ• ํ•˜์—ฌ, ๊ฐ ์ง‘ํ•ฉ์— ์†ํ•œ ์ •์ ๋ผ๋ฆฌ๋Š” ์„œ๋กœ ์ธ์ ‘ํ•˜์ง€ ์•Š๋„๋ก ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ, ๊ทธ๋Ÿฌํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ํŠน๋ณ„ํžˆ ์ด๋ถ„ ๊ทธ๋ž˜ํ”„ (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๋ฅผ ๋Œ๋ ค์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ