티스토리 뷰

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

 

1167번: 트리의 지름

트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지

www.acmicpc.net

문제

트리의 지름이란, 트리에서 임의의 두 점 사이의 거리 중 가장 긴 것을 말한다. 트리의 지름을 구하는 프로그램을 작성하시오.

코드

import sys
from collections import deque
v = int(sys.stdin.readline())
tree = [[] for _ in range(v + 1)]
for _ in range(v):
    arr = list(map(int, sys.stdin.readline().split()))
    for i in range(1, len(arr) - 1, 2):
        tree[arr[0]].append([arr[i], arr[i + 1]])
def bfs(i):
    q = deque()
    visited = [-1] * (v + 1)
    q.append(i)
    visited[i] = 0
    max_n = [0, 0]
    while q:
        n = q.popleft()
        for a in tree[n]:
            if visited[a[0]] == -1:
                visited[a[0]] = visited[n] + a[1]
                q.append(a[0])
                if max_n[0] < visited[a[0]]:
                    max_n[0] = visited[a[0]]
                    max_n[1] = a[0]
    return max_n
array = bfs(1)
print(bfs(array[1])[0])

풀이

1에서 부터 가장 멀리있는 노드를 구하고 그 후 그 노드를 한번 더 bfs로 돌려 가장 멀리있는 노드를 구하면 된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/12   »
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
글 보관함