728x90
https://www.acmicpc.net/problem/1167
1167번: 트리의 지름
트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지
www.acmicpc.net
트리의 지름을 구하는 방법은 우선, 한 노드에서 가장 멀리 있는 노드를 구한다.
그리고 그 노드에서 가장 멀리 있는 길이를 구한다.
그러면 그게 노드의 지름이 된다.
그러면 2번 길이를 구해야 하는 데, 귀찮아서 함수로 만들어버렸다.
우선 각 그래프에 대한 정보를 입력 받은 후 BFS를 진행한다.
처음의 BFS에서는 가장 멀리 있는 노드를 구하고, 그 다음의 BFS에서는 길이를 구한 후 출력한다.
from collections import deque
import sys
V = int(sys.stdin.readline())
graph = [[] for _ in range(V + 1)]
for _ in range(V):
c = list(map(int, sys.stdin.readline().split()))
for e in range(1, len(c) - 2, 2):
graph[c[0]].append((c[e], c[e + 1]))
def bfs(target):
weight = [-1] * (V + 1)
weight[target] = 0
need_visit = deque()
need_visit.append(target)
result = [0, 0]
while need_visit:
cur = need_visit.popleft()
for v, w in graph[cur]:
if weight[v] == -1:
weight[v] = weight[cur] + w
need_visit.append(v)
if result[0] < weight[v]:
result = [weight[v], v]
return result
print(bfs(bfs(1)[1])[0])
'알고리즘 > 그래프' 카테고리의 다른 글
백준 16234 인구 이동 (Python) (0) | 2024.02.18 |
---|---|
백준 5014 스타트링크 (Python) (1) | 2024.02.18 |
백준 7562 나이트의 이동 (Python) (0) | 2024.02.17 |
백준 2644 촌수계산 (Python) (0) | 2024.02.12 |
백준 3055 탈출 (Python) (0) | 2024.02.11 |