# Coding/# 백준
[백준 / 1167] 트리의 지름 - Python
강현들
2022. 4. 21. 16:41
728x90
반응형
https://www.acmicpc.net/problem/1167
1167번: 트리의 지름
트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지
www.acmicpc.net
<풀이>
트리의 지름은 임의의 한 점에서 가장 먼점(A)과, 그 점(A)와 가장 먼 점(B) 사이의 거리이다.
따라서 두번의 경로찾기(DFS나 BFS)로 해답을 찾을 수 있다.
<전체 코드>
import sys
from collections import deque
V = int(sys.stdin.readline())
tree = {}
for _ in range(V):
line = list(map(int, sys.stdin.readline().split()))
now = line[0]
tree[now] = []
for i in range(len(line)//2-1):
tree[now].append([line[2*i+1], line[2*i+2]])
def DFS(n):
visit = [-1]*(V+1)
que = deque([n])
visit[n] = 0
long_node, long_dis = 0, 0
while que:
now = que.pop()
for next, dis in tree[now]:
if visit[next] == -1:
visit[next] = visit[now]+dis
que.append(next)
if long_dis < visit[next]:
long_node = next
long_dis = visit[next]
return long_node, long_dis
node, dis = DFS(1)
node, dis = DFS(node)
print(dis)
728x90
반응형