728x90
반응형
https://www.acmicpc.net/problem/1967
1967번: 트리의 지름
파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연
www.acmicpc.net
문제 해결
- 간선에 가중치(거리)가 있다.
- 부모 자식 관계는 중요하지 않다. 그냥 노드와 노드사이의 가중치 합이 큰 것을 찾아야 한다.
- 제일 위에 있는 1에서 시작해서 가장 멀리 있는 것을 찾아본다. 이거는 BFS나 DFS 둘다 가능할 것이다.
- 가장 멀리 있는 인덱스에서 다시 시작해서 가장 멀리 있는 노드까지 가중치(거리) 합을 구한다. 이 것이 정답.
- 유사문제와 거의 비슷하다. 다른점은 가중치 존재 여부
유사 문제
https://thought-process-ing.tistory.com/32
백준 1167 트리의 지름
https://www.acmicpc.net/problem/1167 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가
thought-process-ing.tistory.com
코드(BFS)
import sys
input = sys.stdin.readline
from collections import deque
def bfs(start):
visited = [-1 for _ in range(n+1)]
visited[start] = 0
que = deque()
que.append((start,0))
maximum = [0,0]
while que:
now, way = que.popleft()
for next, distance in graph[now]:
if visited[next] == -1:
visited[next] = way+distance
que.append((next,visited[next]))
if maximum[1] < visited[next]:
maximum = next, visited[next]
return maximum
n = int(input())
graph = [[] for _ in range(n+1)]
for _ in range(n-1):
a, b, c = map(int, input().split())
graph[a].append((b,c))
graph[b].append((a,c))
node, distance = bfs(1)
node, distance = bfs(node)
print(distance)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[Python] 백준 17413 단어 뒤집기2 (0) | 2022.12.14 |
---|---|
[Python] 백준 1717 집합의 표현 (0) | 2022.12.13 |
[Python] 백준 1406 에디터 (0) | 2022.12.12 |
[Python] 백준 1991 트리 순회 (0) | 2022.12.10 |
[Python]백준 1167 트리의 지름 (0) | 2022.12.10 |
댓글