728x90
https://www.acmicpc.net/problem/1167
문제 설명
- 트리의 지름의 최댓값을 구하는 문제이다.
문제 풀이
- 트리의 임의의 한 점에서 각 노드로 가는 최댓값을 구한다. → 트리의 지름에 해당하는 두 노드를 a와 b라고 했을 때, 임의의 한 노드에서 다른 임의의 한 노드까지의 거리의 최댓값에 해당하는 노드는 항상 a이거나 b이다.
- bfs를 두 번 돌린다. → a혹은 b를 찾고 → 다시 최대 경로를 구해서 지름을 구한다.
풀이 코드
from collections import deque as dq
import sys; input = sys.stdin.readline
def bfs(v, arr, s):
q = dq()
q.append((s, 0))
visit = [-1] * (v + 1)
visit[s] = 0
res = [0, 0]
while q:
now, dist = q.popleft()
for n_next, dist_next in arr[now]:
if visit[n_next] == -1:
sum_dist = dist + dist_next
q.append((n_next, sum_dist))
visit[n_next] = sum_dist
if res[1] < sum_dist:
res[0], res[1] = n_next, sum_dist
return res
v = int(input())
arr = [[] for _ in range(v + 1)]
for _ in range(v):
graph = list(map(int, input().split()))
v_cur = graph[0]
i = 1
while True:
if graph[i] == -1:break
e, w = graph[i], graph[i + 1]
arr[v_cur].append((e, w))
i += 2
print(bfs(v, arr, bfs(v, arr, 1)[0])[1])
반응형
'백준 문제풀이 코드저장소 > Gold' 카테고리의 다른 글
Baekjoon 9328. 열쇠 / Python (0) | 2024.12.18 |
---|---|
Baekjoon 1197. 최소 스패닝 트리 / Python (0) | 2024.12.17 |
Baekjoon 1194. 달이 차오른다, 가자. (0) | 2024.09.04 |
Baekjoon 32069. 가로등 / Python (0) | 2024.07.29 |