fork download
  1. def min_heapify(A, i):
  2. l = 2*i
  3. r = 2*i+1
  4. if l<=len(A) and (A[l-1].value!=float("inf") or A[i-1].value != float("inf")) and A[l-1].value < A[i-1].value:
  5. smallest = l
  6. else:
  7. smallest = i
  8. if r<=len(A) and (A[l-1].value!=float("inf") or A[i-1].value != float("inf")) and A[r-1].value < A[smallest-1].value:
  9. smallest = r
  10. if i != smallest:
  11. A[smallest-1], A[i-1] = A[i-1], A[smallest-1]
  12. min_heapify(A, smallest)
  13.  
  14. def heap_extract_min(A):
  15. min_node = A[0]
  16. A[0], A[-1] = A[-1], A[0]
  17. del A[-1]
  18. min_heapify(A, 1)
  19. return min_node
  20.  
  21. def build_min_heap(A):
  22. for i in range(len(A)//2, 0, -1):
  23. min_heapify(A,i)
  24.  
  25. def Heapsort(A):
  26. B = []
  27. build_min_heap(A)
  28. for i in range(len(A), 1, -1):
  29. B.append(A[0])
  30. A[0], A[i-1]= A[i-1], A[0]
  31. del A[-1]
  32. min_heapify(A,1)
  33. B.append(A[-1])
  34. return B
  35.  
  36. class node:
  37. def __init__(self, name, value):
  38. self.name = name
  39. self.value = value
  40. self.pi = None
  41.  
  42. def e(n_from, n_to):
  43. return E[ord(n_from.name)-65][ord(n_to.name)-65]
  44.  
  45. def relax(u,v,w):
  46. global Q
  47. if v.value > u.value + w:
  48. v.value = u.value + w
  49. v.pi = u
  50. build_min_heap(Q)
  51.  
  52. global Q
  53. Q = list(raw_input().split(','))
  54.  
  55. for i in range(len(Q)):
  56. if Q[i] == 'A':
  57. Q[i] = node(Q[i], 0)
  58. continue
  59. Q[i] = node(Q[i], float("inf"))
  60.  
  61. n = int(input())
  62.  
  63. E = []
  64. for i in range(26):
  65. F = []
  66. for j in range(26):
  67. F.append(0)
  68. E.append(F)
  69.  
  70. for i in range(n):
  71. a,b,c = raw_input().split(',')
  72. E[ord(a)-65][ord(b)-65] = int(c)
  73.  
  74. S = []
  75. Q = Heapsort(Q)
  76.  
  77. while len(Q)!=0:
  78. u = heap_extract_min(Q)
  79. S.append(u)
  80. for i in range(len(Q)):
  81. if E[ord(u.name)-65][ord(Q[i].name)-65] !=0:
  82. w = e(u, Q[i])
  83. relax(u, Q[i], w)
  84.  
  85. for i in range(26):
  86. for j in range(len(S)):
  87. if S[j].name == chr(65+i):
  88. print(S[j].value)
Success #stdin #stdout 0.02s 7108KB
stdin
A,B,C,D,E,F,G,H,I,J,K,L,M,N
99
A,B,1
A,D,5
A,E,2
A,H,1
A,J,3
A,K,3
A,L,7
B,D,7
B,F,7
B,J,5
B,L,2
B,N,2
C,A,5
C,B,7
C,E,6
C,F,3
C,G,1
C,H,2
C,I,6
C,L,3
C,N,5
D,C,4
D,E,2
D,F,7
D,I,6
D,K,5
D,N,2
E,A,3
E,B,6
E,F,1
E,G,3
E,I,3
E,J,1
E,K,7
E,M,3
F,A,2
F,B,5
F,C,7
F,D,2
F,H,4
F,J,2
F,L,4
F,N,3
G,A,4
G,D,3
G,E,1
G,J,6
G,K,7
G,L,2
G,M,2
H,A,2
H,B,7
H,C,4
H,D,3
H,E,2
H,F,6
H,J,7
H,K,5
H,N,4
I,A,5
I,D,2
I,E,6
I,K,6
I,M,7
I,N,1
J,B,6
J,C,5
J,E,3
J,H,6
J,I,4
J,K,5
J,M,7
K,A,6
K,D,5
K,F,3
K,G,3
K,H,4
K,I,7
K,J,7
K,L,3
K,N,3
L,A,6
L,B,2
L,D,1
L,F,6
L,J,1
L,M,3
M,D,6
M,E,2
M,F,3
M,G,7
M,H,2
M,K,5
M,L,7
M,N,4
N,D,2
N,J,6
N,K,6
N,L,6
stdout
0
1
5
4
2
3
5
1
5
3
3
6
5
3