카테고리 없음

백준_python 1967번 트리의 지름 (트리, DFS)

O'bin 2024. 8. 6. 11:06

<문제 링크>

https://www.acmicpc.net/problem/1967

 

 

<정답 코드>

sol ) DFS를 이용한 최대 경로 길이 탐색

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**5)
 
def dfs(node):
    global max_dia, tree, visited
    # 현재 노드에서 자식 노드로 가는 경로 중 가장 긴 경로 두개 저장
    long_one, long_two = 00
    # 인접 노드 탐색
    for cn, cw in tree[node]:
        if not visited[cn]:
            visited[cn] = True
            path_len = dfs(cn) + cw
            
            if path_len > long_one:
                long_one, long_two = path_len, long_one
            elif path_len > long_two:
                long_two = path_len
    
    max_dia = max(max_dia, long_one + long_two)
    return long_one
 
def main():
    global tree, visited, max_dia
    # 입력
    n = int(input())
    tree = [[] for _ in range(n+1)]
 
    # tree[노드번호] = (부모or자식노드번호, 가중치)
    for _ in range(n-1):
        p, c, w = map(int, input().split())
        tree[p].append((c, w))
        tree[c].append((p, w))
 
    visited = [False* (n+1)
    max_dia = 0
 
    # 루트 노드에서 탐색 시작
    visited[1= True
    dfs(1)
 
    print(max_dia)
 
if __name__ == '__main__':
    main()
cs