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 9192KB
stdin
A,B,C,D,E,F,G,H,I,J,K,L,M,N
98
A,B,3
A,C,4
A,E,6
A,F,1
A,G,3
A,I,7
A,J,7
A,L,3
B,A,6
B,F,4
B,K,5
B,L,2
B,M,7
C,D,4
C,F,6
C,H,6
C,N,7
D,C,1
D,E,5
D,G,2
D,I,3
D,J,1
D,M,2
E,A,1
E,C,2
E,D,3
E,F,5
E,G,2
E,H,3
E,K,5
E,M,7
F,B,1
F,E,2
F,G,4
F,K,4
F,M,3
G,A,2
G,B,6
G,C,7
G,D,3
G,F,4
G,H,4
G,I,4
G,K,7
G,L,7
G,N,6
H,A,6
H,B,3
H,E,1
H,F,4
H,J,6
H,N,2
I,C,3
I,G,3
I,H,1
I,J,6
J,A,5
J,B,3
J,C,6
J,D,1
J,F,7
J,H,2
J,K,4
J,L,4
J,M,5
J,N,3
K,A,4
K,B,7
K,D,3
K,E,1
K,H,4
K,I,3
K,M,3
K,N,2
L,A,2
L,D,6
L,E,7
L,F,7
L,G,7
L,I,6
L,J,6
L,N,3
M,A,6
M,C,3
M,D,1
M,G,4
M,I,7
M,J,6
M,K,6
M,L,7
N,A,6
N,B,2
N,C,1
N,D,7
N,E,4
N,F,6
N,G,5
N,K,4
stdout
0
3
4
5
3
1
3
6
7
6
5
3
4
6