반응형
1240번: 노드사이의 거리
N(2≤N≤1,000)개의 노드로 이루어진 트리가 주어지고 M(M≤1,000)개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라.
www.acmicpc.net
풀이
- 트리에서 노드 사이의 거리를 입력받고 입력된 두개의 노드 사이의 거리를 출력하는 문제이다.
- bfs를 통해 트리를 탐색하고 way 배열에 start 노드 부터 해당 노드까지의 거리를 저장하였다.
- bfs의 큐에서 end 노드가 pop 되는 시점이 목표 노드까지 도달하였다는 뜻이므로 , way 배열에 저장된 해당 노드까지의 거리를 출력하면 된다.
import sys
n,m = map(int, sys.stdin.readline().split(" "))
graph = [[] for _ in range(n+1)]
for _ in range(n-1):
a,b,c = map(int, sys.stdin.readline().split(" "))
graph[a].append([b,c])
graph[b].append([a,c])
def bfs(start,end):
root = [start]
global n
global graph
visited = [0]*(n+1)
way = [0]*(n+1)
while root:
k = root.pop(0)
if k == end:
break
if visited[k] == 0:
visited[k] = 1
for i in graph[k]:
root.append(i[0])
way[i[0]] = way[k] + i[1]
return way[end]
for _ in range(m):
a,b = map(int, sys.stdin.readline().split(" "))
print(bfs(a,b))
반응형
'코딩 > 백준' 카테고리의 다른 글
알고리즘 - Python / 백준 - 1715번 : 카드 정렬하기 (0) | 2021.10.14 |
---|---|
알고리즘/숏코딩 - Python / 백준 - 2154번 : 수 이어 쓰기 3 (0) | 2021.10.10 |
알고리즘/숏코딩 - Python / 백준 - 22396번 : カレー作り (0) | 2021.10.10 |
알고리즘 - Python / 백준 - 1068번 : 트리 (0) | 2021.10.07 |
알고리즘 - Python / 백준 - 1991번 : 트리 순회 (0) | 2021.09.26 |