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. return S
  56.  
  57. def initialize(G, s):
  58. for i in G:
  59. if ( i.name == s):
  60. i.value = 0
  61. else:
  62. i.value = float("inf")
  63.  
  64. def relax(u, v, w):
  65. if ( v.value > u.value + w):
  66. v.value = u.value + w
  67. v.pre = u
  68.  
  69. def adj(W, u, v):
  70. if ( (u.name, v.name) in W ):
  71. return True
  72. else:
  73. return False
  74.  
  75. if __name__ == '__main__':
  76. V = input().split(",")
  77. G = []
  78. for i in V:
  79. G.append(Node(i, 0, None))
  80.  
  81. n = int(input())
  82. W={}
  83. for i in range(n):
  84. edge = input().split(",")
  85. W[(edge[0],edge[1])] = int(edge[2])
  86.  
  87. End = dijkstra(G,W,G[0].name)
  88.  
  89. answer = {}
  90. for i in End:
  91. answer[i.name] = i.value
  92.  
  93. for i in V:
  94. print(answer[i])
Success #stdin #stdout 0.02s 9260KB
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