๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/DFS BFS

[Python] ๋ฐฑ์ค€ 1967 ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„

by JayAlex07 2023. 2. 16.

๐Ÿง‘‍๐Ÿ’ป [Python] ๋ฐฑ์ค€ 1967 ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„

Gold 4 - DFS

 

๋‘ ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ฐ€์ค‘์น˜๋“ค์„ ๋”ํ–ˆ์„ ๋•Œ์— ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ

 

์—ฌ๊ธฐ์„œ 1์˜ ๊ธฐ์ค€์—์„œ ๊ฐ€์ค‘์น˜๊ฐ€ ์ œ์ผ ํฐ ๋…ธ๋“œ๋ฅผ ๊ตฌํ•œ๋‹ค

 

๊ทธ ๋‹ค์Œ, ๊ฐ€์ค‘์น˜๊ฐ€ ์ œ์ผ ํฐ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘์œผ๋กœ DFS๋ฅผ ํ•˜์—ฌ, ์ œ์ผ ํฐ ๊ฐ€์ค‘์น˜๋ฅผ ๊ตฌํ•œ๋‹ค

 

์—ฌ๊ธฐ์„œ DFS๋ฅผ ํ•˜๋ฉด ์–ด๋””์„œ๋“ , ์ œ์ผ ๋์— ์žˆ๋Š” ์ž์‹ ๋…ธ๋“œ์— ๊ฐ€๊ฒŒ ๋œ๋‹ค


 

๋ฌธ์ œํ’€์ด

  • ์ฒซ DFS๋ฅผ ํ•œ ํ›„์—,visited ๋ฆฌ์ŠคํŠธ ๋‹ค์‹œ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์•ผ ํ•œ๋‹ค
  • second_index = visited.index(max(visited))์„ ํ†ตํ•ด์„œ ๋‘๋ฒˆ์งธ DFS๋ฅผ ํ•  ๋•Œ์—, ์‹œ์ž‘ ์ ์„ ์ฐพ๋Š”๋‹ค

 

์ฝ”๋“œ

import sys
sys.setrecursionlimit(10 ** 9)

def dfs(start, weight):

    for node, wei in tree[start]:
        if visited[node] == -1:
            visited[node] = weight + wei
            dfs(node, weight + wei)

n = int(input())
tree = [[] for _ in range(n + 1)]
visited = [-1] * (n + 1)
visited[1] = 0

for _ in range(n-1):
    a, b, w = map(int, input().split())
    tree[a].append((b, w))
    tree[b].append((a, w))

dfs(1, 0)

second_index = visited.index(max(visited))

visited = [-1] * (n + 1)
visited[second_index] = 0
dfs(second_index, 0)

print(max(visited))