728x90
반응형
https://www.acmicpc.net/problem/1967
1967번: 트리의 지름
파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연
www.acmicpc.net
<풀이>
트리의 지름이란 두 점을 기준으로 길게 폈을 때 가장 길어지는 거리이다.
즉 기준이되는 두 점은 연결 노드가 한개다.
연결 노드가 한개인 점에서 다른 연결 노드가 한개인 점까지의 모든 길이를 비교해서 가장 긴 길이를 출력하면 된다.
<전체 코드>
import sys
from collections import deque
N = int(sys.stdin.readline())
tree = {i: [] for i in range(1, N+1)}
for _ in range(N-1):
x, y, d = map(int, sys.stdin.readline().split())
tree[x].append([y, d])
tree[y].append([x, d])
radius = 0
for i in range(1, N+1):
if len(tree[i]) == 1:
queue = deque([[i, -1, 0]])
while queue:
now, prev, dis = queue.pop()
if prev != -1 and len(tree[now]) == 1:
if radius < dis:
radius = dis
else:
for next, next_dis in tree[now]:
if next != prev:
queue.append([next, now, dis+next_dis])
print(radius)
728x90
반응형
'# Coding > # 백준' 카테고리의 다른 글
[백준 / 2132] 나무 위의 벌레 - Python (0) | 2022.04.22 |
---|---|
[백준 / 1167] 트리의 지름 - Python (0) | 2022.04.21 |
[백준 / 13913] 숨바꼭질 4 - Python (0) | 2022.04.07 |
[백준 / 13549] 숨바꼭질 3 - Python (0) | 2022.04.07 |
[백준 / 12851] 숨바꼭질 2 - Python (0) | 2022.04.07 |