bong-u/til

백준 - 1167 : 트리의 지름 (G2)

수정일 : 2024-11-15

 1import sys
 2sys.setrecursionlimit(10**6)
 3input = sys.stdin.readline
 4
 5V = int(input())
 6G = [[] for _ in range(V)]
 7for _ in range(V):
 8    token = list(map(int, input().split()))[:-1]
 9    for i in range(1, len(token), 2):
10        G[token[0]-1].append((token[i]-1, token[i+1]))
11
12def dfs(node, dist):
13    global max_node, max_dist
14    visited[node] = True
15    if dist > max_dist:
16        max_node = node
17        max_dist = dist
18    for n_node, n_dist in G[node]:
19        if not visited[n_node]:
20            dfs(n_node, dist+n_dist)
21
22max_node = 0
23
24max_dist = 0
25visited = [False]*V
26dfs(0, 0)
27max_dist = 0
28visited = [False]*V
29dfs(max_node, 0)
30
31print (max_dist)
  • 최근에 푼 “1967: 트리의 지름” 덕분에 쉽게 해결할 수 있었다
  • 기억하자 트리의 지름 = (어떤 한 정점에서 가장 먼 점 P)에서 가장 먼 점 사이의 거리