Skip to content

BOJ 11725 ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ ํ’€์ดย #3

@allzeroyou

Description

@allzeroyou

๋ฌธ์ œ ๋ถ„์„

์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„(๋ฌธ์ œ ์š”์•ฝ ๋ฐ ์กฐ๊ฑด ํŒŒ์•…)

๋ฃจํŠธ ์—†๋Š” ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง.

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

๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„ (๋ฌธ์ œ ํ•ต์‹ฌ ํŒŒ์•…)

๋ฌด๋ฐฉํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„์ž„์„ ๊นจ๋‹ฌ์•˜๋‹ค.

์ด๋Š” ํŠธ๋ฆฌ ์ด๋ฉฐ, ํŠธ๋ฆฌ ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜(DFS, BFS)์„ ๋– ์˜ฌ๋ ธ๋‹ค.

  • ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N (2 โ‰ค N โ‰ค 100,000)์ด ์ฃผ์–ด์ง.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N-1๊ฐœ์˜ ์ค„์— ํŠธ๋ฆฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋œ ๋‘ ์ •์ ์ด ์ฃผ์–ด์ง„๋‹ค.

  • ์ถœ๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ N-1๊ฐœ์˜ ์ค„์— ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋ฅผ 2๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœย ์ถœ๋ ฅํ•œ๋‹ค.

์ด๋•Œ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์‹ญ๋งŒ๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ DFS ํ’€์ด๋Š” ์‚ด์ง ๋ถˆ๋ฆฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐ.

๋”ฐ๋ผ์„œ BFS๋กœ ํ’€์ดํ•˜๊ฒ ์Œ.

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

์ฝ”๋“œ ์ž‘์„ฑ

from collections import deque

n = int(input())
visited = [False for _ in range(n + 1)]  # ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋œ ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ํ‘œํ˜„(1์ฐจ์› ๋ฆฌ์ŠคํŠธ)
answer = [0 for _ in range(n + 1)]  # ์ •๋‹ต ๋‹ด์„ ๋ฆฌ์ŠคํŠธ
graph = [[0] for _ in range(n + 1)]  # ํŠธ๋ฆฌ

for _ in range(n - 1):  # 1์€ ์ œ์™ธ
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)  # ๋ฌด๋ฐฉํ–ฅ์€ ์–‘๋ฐฉํ–ฅ์ž„.

def bfs(graph, start, visited):
    # ํ(Queue) ๊ตฌํ˜„์„ ์œ„ํ•ด deque ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
    que = deque([start])
    # ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
    visited[start] = True
    # ํ๊ฐ€ ๋นŒ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    while que:
        v = que.popleft()
        # ํ•ด๋‹น ์›์†Œ์™€ ์—ฐ๊ฒฐ๋œ, ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์›์†Œ๋“ค์„ ํ์— ์‚ฝ์ž…
        for i in graph[v]:
            if not visited[i]:
                answer[i] = v
                que.append(i)
                visited[i] = True

bfs(graph, 1, visited)

for i in range(2, n + 1):  # 2๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œํ–‰
    print(answer[i])

๋А๋‚€์ 

์ด์ฝ”ํ…Œ 3ํšŒ๋… ๋‹ค์‹œ ๊ฐ€์•ผํ•˜๋‚˜..

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentation

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions