# Author : prayushd
# Language : Python
import re
import os
import sys
from random import randint
from datetime import datetime
from functools import reduce
from math import ceil, inf, floor
from fractions import gcd
from queue import Queue
from heapq import heapify, heappush, heappop
from collections import defaultdict, Counter, deque
from bisect import bisect, insort, bisect_left, bisect_right
mod = int(1e9)+7
mod_ = 998244353
MAX = int(1e5)+1
input = sys.stdin.readline
'''
Check for special cases (n=1)
One wrong submission = 10 mins penalty!
do smth instead of nothing and stay organized
'''
graph = defaultdict(list)
edges = dict()
def shortest_path(start, end, n):
dist = [inf]*(n+1)
dist[start] = 0
parent = [None]*(n+1)
q = [(0, start)]
heapify(q)
while q:
x, u = heappop(q)
for child in graph[u]:
v, _ = child
d = edges[tuple(sorted([u, v]))]
if dist[u] + d < dist[v]:
dist[v] = dist[u] + d
parent[v] = u
heappush(q, (dist[v], v))
path = []
while True:
path.append(end)
if parent[end] is None:
break
end = parent[end]
path = path[::-1]
return path
def main():
for _ in range(int(input())):
graph.clear()
edges.clear()
n, m = map(int, input().split())
src, des, mid = map(int, input().split())
for i in range(m):
u, v, w = map(int, input().split())
edges[tuple(sorted([u, v]))] = w
graph[u].append((v, w))
graph[v].append((u, w))
total = 0
path1 = shortest_path(src, mid, n)
for i in range(1, len(path1)):
total += edges[tuple(sorted([path1[i], path1[i-1]]))]
edges[tuple(sorted([path1[i], path1[i-1]]))] = 0
path2 = shortest_path(mid, des, n)
for i in range(1, len(path2)):
total += edges[tuple(sorted([path2[i], path2[i-1]]))]
print(total)
if __name__ == '__main__':
main()
IyBBdXRob3IgOiBwcmF5dXNoZAojIExhbmd1YWdlIDogUHl0aG9uCgppbXBvcnQgcmUKaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQpmcm9tIG1hdGggaW1wb3J0IGNlaWwsIGluZiwgZmxvb3IKZnJvbSBmcmFjdGlvbnMgaW1wb3J0IGdjZApmcm9tIHF1ZXVlIGltcG9ydCBRdWV1ZQpmcm9tIGhlYXBxIGltcG9ydCBoZWFwaWZ5LCBoZWFwcHVzaCwgaGVhcHBvcApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdCwgQ291bnRlciwgZGVxdWUKZnJvbSBiaXNlY3QgaW1wb3J0IGJpc2VjdCwgaW5zb3J0LCBiaXNlY3RfbGVmdCwgYmlzZWN0X3JpZ2h0Cgptb2QgPSBpbnQoMWU5KSs3Cm1vZF8gPSA5OTgyNDQzNTMKTUFYID0gaW50KDFlNSkrMQppbnB1dCA9IHN5cy5zdGRpbi5yZWFkbGluZQoKJycnCkNoZWNrIGZvciBzcGVjaWFsIGNhc2VzIChuPTEpCk9uZSB3cm9uZyBzdWJtaXNzaW9uID0gMTAgbWlucyBwZW5hbHR5IQpkbyBzbXRoIGluc3RlYWQgb2Ygbm90aGluZyBhbmQgc3RheSBvcmdhbml6ZWQKJycnCgpncmFwaCA9IGRlZmF1bHRkaWN0KGxpc3QpCmVkZ2VzID0gZGljdCgpCgpkZWYgc2hvcnRlc3RfcGF0aChzdGFydCwgZW5kLCBuKToKCWRpc3QgPSBbaW5mXSoobisxKQoJZGlzdFtzdGFydF0gPSAwCglwYXJlbnQgPSBbTm9uZV0qKG4rMSkKCglxID0gWygwLCBzdGFydCldCgloZWFwaWZ5KHEpCgl3aGlsZSBxOgoJCXgsIHUgPSBoZWFwcG9wKHEpCgkJZm9yIGNoaWxkIGluIGdyYXBoW3VdOgoJCQl2LCBfID0gY2hpbGQKCQkJZCA9IGVkZ2VzW3R1cGxlKHNvcnRlZChbdSwgdl0pKV0KCQkJaWYgZGlzdFt1XSArIGQgPCBkaXN0W3ZdOgoJCQkJZGlzdFt2XSA9IGRpc3RbdV0gKyBkCgkJCQlwYXJlbnRbdl0gPSB1CgkJCQloZWFwcHVzaChxLCAoZGlzdFt2XSwgdikpCgoJcGF0aCA9IFtdCgl3aGlsZSBUcnVlOgoJCXBhdGguYXBwZW5kKGVuZCkKCQlpZiBwYXJlbnRbZW5kXSBpcyBOb25lOgoJCQlicmVhawoJCWVuZCA9IHBhcmVudFtlbmRdCgoJcGF0aCA9IHBhdGhbOjotMV0KCXJldHVybiBwYXRoCgoKZGVmIG1haW4oKToKCWZvciBfIGluIHJhbmdlKGludChpbnB1dCgpKSk6CgkJZ3JhcGguY2xlYXIoKQoJCWVkZ2VzLmNsZWFyKCkKCQluLCBtID0gbWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKQoJCXNyYywgZGVzLCBtaWQgPSBtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpCgkJZm9yIGkgaW4gcmFuZ2UobSk6CgkJCXUsIHYsIHcgPSBtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpCgkJCWVkZ2VzW3R1cGxlKHNvcnRlZChbdSwgdl0pKV0gPSB3CgkJCWdyYXBoW3VdLmFwcGVuZCgodiwgdykpCgkJCWdyYXBoW3ZdLmFwcGVuZCgodSwgdykpCgkJdG90YWwgPSAwCgkJcGF0aDEgPSBzaG9ydGVzdF9wYXRoKHNyYywgbWlkLCBuKQoJCWZvciBpIGluIHJhbmdlKDEsIGxlbihwYXRoMSkpOgoJCQl0b3RhbCArPSBlZGdlc1t0dXBsZShzb3J0ZWQoW3BhdGgxW2ldLCBwYXRoMVtpLTFdXSkpXQoJCQllZGdlc1t0dXBsZShzb3J0ZWQoW3BhdGgxW2ldLCBwYXRoMVtpLTFdXSkpXSA9IDAKCQlwYXRoMiA9IHNob3J0ZXN0X3BhdGgobWlkLCBkZXMsIG4pCgkJCgkJZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKHBhdGgyKSk6CgkJCXRvdGFsICs9IGVkZ2VzW3R1cGxlKHNvcnRlZChbcGF0aDJbaV0sIHBhdGgyW2ktMV1dKSldCgkJCgkJcHJpbnQodG90YWwpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKCW1haW4oKQ==