[백준(파이썬/Python)] 1967_트리의 지름

kindof

·

2021. 8. 1. 13:30

 

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

 

1967번: 트리의 지름

파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연

www.acmicpc.net

 

백준 1167번 트리의 지름 문제와 완벽하게 동일해서 해당 문제에 대한 풀이를 참고하면 될 것 같습니다.

 

[백준(파이썬/Python)] 1167_트리의 지름

https://www.acmicpc.net/problem/1167 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가.

studyandwrite.tistory.com

 

 

from collections import defaultdict, deque
import sys

def bfs(start):
    node, diameter = 0, 0

    visited = [False] * (n+1)
    visited[start] = True
    q = deque()
    q.append((start, 0))    

    while q:
        now, cost = q.popleft()

        if diameter < cost:
            diameter = cost
            node = now

        for t in tree[now]:
            child, weight = t[0], t[1]
            if not visited[child]:
                q.append((child, cost + weight))
                visited[child] = True
    return node, diameter



n = int(input())
tree = defaultdict(list)

# 트리 초기화
for _ in range(n-1):
    a, b, weight = map(int, sys.stdin.readline().split())
    tree[a].append((b, weight))
    tree[b].append((a, weight))
    

randomNode, maxDist = bfs(1)
randomNode, maxDist = bfs(randomNode)
print(maxDist)