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

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

11725๋ฒˆ: ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ

๋ฃจํŠธ ์—†๋Š” ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ 1์ด๋ผ๊ณ  ์ •ํ–ˆ์„ ๋•Œ, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 2๋ถ€ํ„ฐ n -1 ๊นŒ์ง€์˜ ๋…ธ๋“œ์— ๋Œ€ํ•œ ๋ถ€๋ชจ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๋Š” ๋‹ค๋ฅธ ๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ์—์„œ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์„ ํ™œ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค. BFS๋ฅผ ํ†ตํ•ด ํŠน์ • ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ, ๋ฐฉ๋ฌธ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋Š” ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ๊ฐ€ ๋œ๋‹ค. ๋งŒ์•ฝ ์˜ˆ์ œ ์ž…๋ ฅ 1๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ, BFS๋กœ ํ†ตํ•ด ํƒ์ƒ‰ํ•˜๊ฒŒ ๋˜๋ฉด 1๋ฒˆ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋“ค์€ ๊ฐ๊ฐ 4, 6์ด๊ณ  ์ตœ์ดˆ ๋ฐฉ๋ฌธ ์ƒํƒœ์ด๋ฏ€๋กœ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ 1 ์ž„์„ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ˜„์žฌ์˜ ๋ถ€๋ชจ๋ฅผ ์ฒดํฌํ•ด๋‘๋ฉด ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin
from collections import deque


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

    while q:
        parent = q.popleft()
        for child in graph[parent]:
            if not visited[child]:
                visited[child] = parent
                q.append(child)

    print('\n'.join(map(str, visited[2:])))


if __name__ == '__main__':
    n = int(stdin.readline())
    visited = [0] * (n + 1)
    visited[1] = 1
    graph = [[] for _ in range(n + 1)]

    for _ in range(n - 1):
        node, connect = map(int, stdin.readline().split())
        graph[node].append(connect)
        graph[connect].append(node)

    bfs(1)

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€