728x90
해당 문제는 데이크스트라로 문제를 해결 할 수 있습니다.
“면접장 까지의 거리”란 그 도시에서 도달 가능한 가장 가까운 면접장 까지의 최단 거리를 뜻한다. 가장 멀리에서 오는 면접자의 거리를 구해야한다.
모든 도시에서 면접장까지 모두 데이크스트라를 이용하여 i번째 도시에서 j번째의 면접장 까지 최단 거리를 구한뒤 거기서 최대 거리를 구해야 할까요?!
<aside> 💡 반대로 생각하여 면접장에서 도시까지 방문해 보는것을 생각해보자.
</aside>
각각의 면접장에서 동시에 출발하여 각각의 도시까지의 최단거리를 구하면 문제를 해결 할 수 있다. BFS의 특성을 잘이해 해야 한다.
import sys
import heapq
from pprint import pprint
input = sys.stdin.readline
N, M, K = map(int, input().split())
graph = [[] for _ in range(N+1)]
for _ in range(M):
U, V, C = map(int, input().split())
graph[V].append((C, U)) # 거꾸로 탐색하기위해 거꾸로 넣는다.
ic = list(map(int, input().split()))
maxidx = 0
maxdistance = 0
visited = [100000*500000 for _ in range(N+1)]
queue = []
for init in graph:
init.sort()
for k in ic:
heapq.heappush(queue, (0, k))
visited[k] = 0
maxvalue = 0
maxidx = 0
while queue:
cost, target = heapq.heappop(queue)
if cost > visited[target]:
continue
if cost >= maxvalue:
if maxvalue == cost and target > maxidx:
pass
else:
maxidx = target
maxvalue = cost
for dis, newidx in graph[target]:
if visited[newidx] > cost + dis:
visited[newidx] = cost + dis
heapq.heappush(queue, (dis + cost, newidx))
#pprint(visited)
print(maxidx)
print(maxvalue)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 17135번 : 캐슬 디펜스 (0) | 2023.10.19 |
---|---|
[백준] 15684번 - 사다리 조작 (0) | 2023.10.19 |
[백준] 20055번 : 컨베이어 벨트 위의 로봇 (0) | 2023.10.19 |
[백준] 20002번 : 사과나무 (0) | 2023.10.19 |
[백준] 2922번 : 즐거운단어 (0) | 2023.10.19 |