ダイクストラ法クラスで!

予めEdgeデータとdis(コスト)を用意してあげる必要があります。
import
heapq
V,E,r = map(int,input().split())
dis = [[float('inf')]*V for _ in range(V)]
Edge = [[] for _ in range(V)]
for _ in range(E):
s,t,d = map(int,input().split())
dis[s][t] = d
Edge[s].append(t)
class Diac:#(start,number of ver)-> distance
def __init__(self,r,V):#rはスタート地点
self.long = [float('inf') for _ in range(V)]#経路保存用
self.long[r] = 0
def diac(self):
self.q = [(0,r)]#そこまでの最短距離、頂点
while self.q:
self.div,self.v = heapq.heappop(self.q)#最短距離とその頂点を取り出す,tuppleでははじめの要素の最小値から
for next in Edge[self.v]:
if self.long[self.v] + dis[self.v][next] < self.long[next]:
self.long[next] = self.long[self.v] + dis[self.v][next]
heapq.heappush(self.q,(self.long[next],next))
return self.long
X = Diac(r,V)
for i in X.diac():
if i == float('inf'):
print('INF')
continue
print(i)