ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

1707๋ฒˆ: ์ด๋ถ„ ๊ทธ๋ž˜ํ”„

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ K(2≤K≤5)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ๊ทธ๋ž˜ํ”„์˜ ์ •์ ์˜ ๊ฐœ์ˆ˜ V(1≤V≤20,000)์™€ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ด๋ถ„ ๊ทธ๋ž˜ํ”„์ธ์ง€ ํŒ๋‹จํ•˜์—ฌ ์ด๋ถ„ ๊ทธ๋ž˜ํ”„์œ ๊ฒฝ์šฐ 'YES' ์•„๋‹Œ ๊ฒฝ์šฐ๋Š” 'NO'๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ด๋ถ„ ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋ถ„ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 2๊ฐ€์ง€ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค. ์ฒซ ๋ฒˆ์งธ๋กœ ํ•œ ์ •์ ์—์„œ ๋‹ค๋ฅธ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ, ์„œ๋กœ ๋‹ค๋ฅธ ๊ทธ๋ฃน์ด์–ด์•ผ ํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ, ๋ชจ๋“  ๊ทธ๋ฃน์€ 2๊ฐœ๋กœ ๋‚˜๋‰˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์ด ์žˆ๋‹ค.

 ๋ฌธ์ œ์˜ ์˜ˆ์ œ ์ž…๋ ฅ 1์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ 1, 2๋กœ ๋‚˜๋‰˜๋Š”๋ฐ ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 1์€ ์—ฐ๊ฒฐ๋œ ์ •์ ๋“ค์„ ์„œ๋กœ ๋‹ค๋ฅธ ๊ทธ๋ฃน(์ƒ‰๊น”)๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์–ด ์ด๋ถ„ ๊ทธ๋ž˜ํ”„์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€๋งŒ, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 2๋Š” ๋นจ๊ฐ„์ƒ‰ ๊ฐ„์„ ์œผ๋กœ ์ธํ•ด ์ด๋ถ„ ๊ทธ๋ž˜ํ”„์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ BFS๋ฅผ ํ†ตํ•ด ์ˆœํšŒํ•˜๋ฉด์„œ ํ˜„์žฌ ์ •์ ์—์„œ ๋‹ค๋ฅธ ์ •์ ์œผ๋กœ ๊ฐˆ ๊ฒฝ์šฐ, ๊ทธ๋ฃน์œผ๋กœ ๋ถ„๋ฅ˜๋˜์—ˆ๋‹ค๋ฉด ํ•ด๋‹น ๊ทธ๋ฃน๊ณผ ๋‹ค๋ฅธ์ง€ ํŒ๋‹จํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin
from collections import deque


def bfs(start):
    q = deque([start])

    while q:
        cur_node = q.popleft()

        for next_node in graph[cur_node]:
            if not check[next_node]:
                check[next_node] = -check[cur_node]
                q.append(next_node)
            elif check[cur_node] == check[next_node]:
                return False
    return True


if __name__ == "__main__":
    tc = int(stdin.readline())

    for _ in range(tc):
        v, e = map(int, stdin.readline().split())
        graph = [[] for _ in range(v)]
        check = [0] * v
        answer = False

        for _ in range(e):
            a, b = map(int, stdin.readline().split())
            a, b = a - 1, b - 1
            graph[a].append(b)
            graph[b].append(a)

        for i in range(v):
            if not check[i]:
                check[i] = 1
                if not bfs(i):
                    break
        else:
            answer = True

        print('YES' if answer else 'NO')
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€