본문 바로가기
코딩 테스트/최단 경로

전보

by hazel_ 2021. 3. 10.

p. 262

 

import sys
import heapq

input=sys.stdin.readline

INF=int(1e9)

# 도시의 개수, 통로의 개수, 출발 도시
n, m, c = map(int, input().split())

time=[INF] * (n+1)
graph=[[] for _ in range(n+1)]

for i in range(m):
    # 도시 x부터 도시 y까지 이어지는 통로가 있으며, 전달되는 시간은 z
    x,y,z=map(int, input().split())
    graph[x].append((y,z))

def dijkstra(start):
    q=[]

    heapq.heappush(q, (0, start))

    while q:
        dist, now = heapq.heappop(q)

        if dist > time[now]:
            continue
        else:
            for i in graph[now]:
                cost = dist+i[1]
                if cost < time[i[0]]:
                    time[i[0]] = cost
                    heapq.heappush(q, (cost, i[0]))


dijkstra(c)

count_city = 0
count_time = 0

for i in range(1, n+1):
    if time[i] != INF:
        count_city += 1
        count_time = max(time[i], count_time)
        print(i)

print(count_city, count_time)

'코딩 테스트 > 최단 경로' 카테고리의 다른 글

미래 도시  (0) 2021.03.09
플로이드 워셜 알고리즘  (0) 2021.03.09
다익스트라 최단 경로 알고리즘  (0) 2021.02.28
최단 경로 이론  (0) 2021.02.28

댓글