반응형
1967번: 트리의 지름
파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연
www.acmicpc.net
코드
import sys
from collections import deque
def dfs(a,l):
queue = deque()
queue.append((a,l))
while queue:
a,l = queue.popleft()
for na,nl in graph[a]:
if distance[na] == -1:
queue.append((na,nl))
distance[na] = distance[a]+nl
return distance.index(max(distance)) # a번 노드와 가장 멀리 떨어진 노드 번호 return
n = int(input())
graph = [[] for _ in range(n+1)]
for _ in range(n-1):
a,b,l = map(int,sys.stdin.readline().split())
graph[a].append([b,l])
graph[b].append([a,l])
distance = [-1]*(n+1)
distance[1] = 0
num = dfs(1,0)
distance = [-1]*(n+1)
distance[num] = 0
print(distance[dfs(num,0)])
설명
가장 긴 길이를 구하는 방법을 모르겠어서 검색을 해봤다.
- 먼저 dfs를 이용하여 1번 노드에서 가장 먼 노드 번호 num을 구한다.
- 다시 dfs를 이용하여 num번 노드에서 가장 먼 노드까지의 거리를 구하면 그 값이 트리의 지름이다.
반응형
'알고리즘 > 트리' 카테고리의 다른 글
[백준][Python] 15681번 트리와 쿼리 (0) | 2022.10.14 |
---|---|
[백준][Python] 11437번 LCA (1) | 2022.10.13 |
[백준][Python] 14267번 회사 문화 1 (0) | 2022.09.30 |
[백준][Python] 1240번 노드사이의 거리 (0) | 2022.09.29 |
[백준][Python] 4803번 트리 (0) | 2022.09.27 |
댓글