fork download
  1. class Node():
  2. def __init__(self, name, value, pre = None):
  3. self.name = name
  4. self.value = value
  5. self.pre = pre
  6.  
  7. def build_min_heap(list):
  8. n = len(list)
  9. for i in range(n//2):
  10. min_heapify(list, i)
  11. return list
  12.  
  13. def min_heapify(list, i):
  14. n = len(list)
  15. small = i
  16. L = left(i)
  17. R = right(i)
  18.  
  19. if ( L < n) and ( list[small].value > list[L].value):
  20. small = L
  21. if ( R < n) and ( list[small].value > list[R].value):
  22. small = R
  23.  
  24. if ( small != i):
  25. list[i], list[small] = list[small], list[i]
  26. min_heapify(list, small)
  27.  
  28. def Extract_min(Q):
  29. Q[0], Q[-1] = Q[-1], Q[0]
  30. Small = Q.pop()
  31. build_min_heap(Q)
  32. return Small
  33.  
  34. def parent(i):
  35. return (i-1) // 2
  36.  
  37. def left(i):
  38. return i*2 + 1
  39.  
  40. def right(i):
  41. return i*2 + 2
  42.  
  43. def dijkstra(G, W, s):
  44. initialize(G,s)
  45. S = []
  46. Q = build_min_heap(G)
  47. while (len(Q)>0):
  48. u = Extract_min(Q)
  49. S.append(u)
  50. for i in Q:
  51. if (adj(W, u, i) == True):
  52. w = W[(u.name, i.name)]
  53. relax(u, i, w)
  54. Q = build_min_heap(Q)
  55.  
  56. return S
  57.  
  58. def initialize(G, s):
  59. for i in G:
  60. if ( i.name == s):
  61. i.value = 0
  62. else:
  63. i.value = float("inf")
  64.  
  65. def relax(u, v, w):
  66. if ( v.value > u.value + w):
  67. v.value = u.value + w
  68. v.pre = u
  69.  
  70. def adj(W, u, v):
  71. if ( (u.name, v.name) in W ):
  72. return True
  73. else:
  74. return False
  75.  
  76. if __name__ == '__main__':
  77. V = input().split(",")
  78. G = []
  79. for i in V:
  80. G.append(Node(i, 0, None))
  81.  
  82. n = int(input())
  83. W={}
  84. for i in range(n):
  85. edge = input().split(",")
  86. W[(edge[0],edge[1])] = int(edge[2])
  87.  
  88. End = dijkstra(G,W,G[0].name)
  89.  
  90. answer = {}
  91. for i in End:
  92. answer[i.name] = i.value
  93.  
  94. for i in V:
  95. print(answer[i])
Success #stdin #stdout 0.02s 9136KB
stdin
A,B,C,D,E,F,G,H,I,J
50
A,D,3
A,F,3
A,G,6
A,J,7
B,A,2
B,E,5
B,H,7
C,H,1
D,A,5
D,B,7
D,E,2
D,F,3
D,G,7
D,H,7
D,J,3
E,A,3
E,B,1
E,C,5
E,D,6
E,F,4
E,H,7
E,I,5
E,J,6
F,A,6
F,C,1
F,D,2
F,E,3
F,G,2
F,H,6
F,I,5
F,J,4
G,B,1
G,C,5
G,D,5
G,E,6
G,H,5
G,I,6
H,B,2
H,C,6
H,D,6
H,G,3
H,I,7
I,A,6
I,D,6
I,F,3
I,G,4
I,H,2
I,J,5
J,D,7
J,H,1
stdout
0
6
4
3
5
3
5
5
8
7