class Node():
def __init__(self, name, value, pre = None):
self.name = name
self.value = value
self.pre = pre
def build_min_heap(list):
n = len(list)
for i in range(n//2):
min_heapify(list, i)
return list
def min_heapify(list, i):
n = len(list)
small = i
L = left(i)
R = right(i)
if ( L < n) and ( list[small].value > list[L].value):
small = L
if ( R < n) and ( list[small].value > list[R].value):
small = R
if ( small != i):
list[i], list[small] = list[small], list[i]
min_heapify(list, small)
def Extract_min(Q):
Q[0], Q[-1] = Q[-1], Q[0]
Small = Q.pop()
build_min_heap(Q)
return Small
def parent(i):
return (i-1) // 2
def left(i):
return i*2 + 1
def right(i):
return i*2 + 2
def dijkstra(G, W, s):
initialize(G,s)
S = []
Q = build_min_heap(G)
while (len(Q)>0):
u = Extract_min(Q)
S.append(u)
for i in Q:
if (adj(W, u, i) == True):
w = W[(u.name, i.name)]
relax(u, i, w)
Q = build_min_heap(Q)
return S
def initialize(G, s):
for i in G:
if ( i.name == s):
i.value = 0
else:
i.value = float("inf")
def relax(u, v, w):
if ( v.value > u.value + w):
v.value = u.value + w
v.pre = u
def adj(W, u, v):
if ( (u.name, v.name) in W ):
return True
else:
return False
if __name__ == '__main__':
V = input().split(",")
G = []
for i in V:
G.append(Node(i, 0, None))
n = int(input())
W={}
for i in range(n):
edge = input().split(",")
W[(edge[0],edge[1])] = int(edge[2])
End = dijkstra(G,W,G[0].name)
answer = {}
for i in End:
answer[i.name] = i.value
for i in V:
print(answer[i])
Y2xhc3MgTm9kZSgpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB2YWx1ZSwgcHJlID0gTm9uZSk6CiAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgIHNlbGYucHJlID0gcHJlCgpkZWYgYnVpbGRfbWluX2hlYXAobGlzdCk6CiAgbiA9IGxlbihsaXN0KQogIGZvciBpIGluIHJhbmdlKG4vLzIpOgogICAgbWluX2hlYXBpZnkobGlzdCwgaSkKICByZXR1cm4gbGlzdAoKZGVmIG1pbl9oZWFwaWZ5KGxpc3QsIGkpOgogIG4gPSBsZW4obGlzdCkKICBzbWFsbCA9IGkKICBMID0gbGVmdChpKQogIFIgPSByaWdodChpKQoKICBpZiAoIEwgPCBuKSBhbmQgKCBsaXN0W3NtYWxsXS52YWx1ZSA+IGxpc3RbTF0udmFsdWUpOiAKICAgIHNtYWxsID0gTAogIGlmICggUiA8IG4pIGFuZCAoIGxpc3Rbc21hbGxdLnZhbHVlID4gbGlzdFtSXS52YWx1ZSk6IAogICAgc21hbGwgPSBSCiAgCiAgaWYgKCBzbWFsbCAhPSBpKToKICAgIGxpc3RbaV0sIGxpc3Rbc21hbGxdID0gbGlzdFtzbWFsbF0sIGxpc3RbaV0KICAgIG1pbl9oZWFwaWZ5KGxpc3QsIHNtYWxsKQoKZGVmIEV4dHJhY3RfbWluKFEpOgogIFFbMF0sIFFbLTFdID0gUVstMV0sIFFbMF0KICBTbWFsbCA9IFEucG9wKCkKICBidWlsZF9taW5faGVhcChRKQogIHJldHVybiBTbWFsbAoKZGVmIHBhcmVudChpKToKICByZXR1cm4gKGktMSkgLy8gMgoKZGVmIGxlZnQoaSk6CiAgcmV0dXJuIGkqMiArIDEKCmRlZiByaWdodChpKToKICByZXR1cm4gaSoyICsgMgoKZGVmIGRpamtzdHJhKEcsIFcsIHMpOgogIGluaXRpYWxpemUoRyxzKQogIFMgPSBbXQogIFEgPSBidWlsZF9taW5faGVhcChHKQogIHdoaWxlIChsZW4oUSk+MCk6CiAgICB1ID0gRXh0cmFjdF9taW4oUSkKICAgIFMuYXBwZW5kKHUpCiAgICBmb3IgaSBpbiBROgogICAgICBpZiAoYWRqKFcsIHUsIGkpID09IFRydWUpOgogICAgICAgIHcgPSBXWyh1Lm5hbWUsIGkubmFtZSldCiAgICAgICAgcmVsYXgodSwgaSwgdykKICAgIFEgPSBidWlsZF9taW5faGVhcChRKQogIHJldHVybiBTCgpkZWYgaW5pdGlhbGl6ZShHLCBzKToKICBmb3IgaSBpbiBHOgogICAgaWYgKCBpLm5hbWUgPT0gcyk6CiAgICAgIGkudmFsdWUgPSAwCiAgICBlbHNlOgogICAgICBpLnZhbHVlID0gZmxvYXQoImluZiIpCgpkZWYgcmVsYXgodSwgdiwgdyk6CiAgaWYgKCB2LnZhbHVlID4gdS52YWx1ZSArIHcpOgogICAgdi52YWx1ZSA9IHUudmFsdWUgKyB3CiAgICB2LnByZSA9IHUKCmRlZiBhZGooVywgdSwgdik6ICAgIAogIGlmICggKHUubmFtZSwgdi5uYW1lKSBpbiBXICk6CiAgICByZXR1cm4gVHJ1ZQogIGVsc2U6CiAgICByZXR1cm4gRmFsc2UKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgViA9IGlucHV0KCkuc3BsaXQoIiwiKQogIEcgPSBbXQogIGZvciBpIGluIFY6CiAgICBHLmFwcGVuZChOb2RlKGksIDAsIE5vbmUpKSAgCgogIG4gPSBpbnQoaW5wdXQoKSkKICBXPXt9CiAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICBlZGdlID0gaW5wdXQoKS5zcGxpdCgiLCIpCiAgICBXWyhlZGdlWzBdLGVkZ2VbMV0pXSA9IGludChlZGdlWzJdKQogIAogIEVuZCA9IGRpamtzdHJhKEcsVyxHWzBdLm5hbWUpCgogIGFuc3dlciA9IHt9CiAgZm9yIGkgaW4gRW5kOgogICAgYW5zd2VyW2kubmFtZV0gPSBpLnZhbHVlCiAKICBmb3IgaSBpbiBWOgogICAgcHJpbnQoYW5zd2VyW2ldKQ==
QSxCLEMsRCxFCjEwCkEsQiwxMApBLEMsNQpCLEMsMgpCLEQsMQpDLEIsMwpDLEQsOQpDLEUsMgpELEUsNApFLEEsNwpFLEQsNg==
A,B,C,D,E
10
A,B,10
A,C,5
B,C,2
B,D,1
C,B,3
C,D,9
C,E,2
D,E,4
E,A,7
E,D,6