์๊ณ ๋ฆฌ์ฆ/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))