[白俊13424]秘密の集まり


1.問題の説明


秘密の集まり

2.問題分析


floyd−walshアルゴリズムは,各ノードから他のすべてのノードまでの最短距離を探す.移動するノード行のすべての列値を加算し、左側から最小インデックスを選択します.

3.私の回答

import sys

t = int(sys.stdin.readline().rstrip())

for _ in range(t):
    INF = sys.maxsize
    n, m = map(int, sys.stdin.readline().rstrip().split())
    nodes= [[INF for _ in range(n+1)] for _ in range(n+1)]
    for i in range(1, n+1): nodes[i][i] = 0
    for _ in range(m):
        a, b, c = map(int, sys.stdin.readline().rstrip().split())
        nodes[a][b] = c
        nodes[b][a] = c
    friends_num = int(sys.stdin.readline().rstrip())
    friends = list(map(int, sys.stdin.readline().rstrip().split()))

    for k in range(1, n+1):
        for i in range(1, n+1):
            for j in range(1, n+1):
                if nodes[i][j] > nodes[i][k] + nodes[k][j]:
                    nodes[i][j] = nodes[i][k] + nodes[k][j]

    result = [0 for _ in range(n+1)]
    result[0] = INF

    for i in friends:
        for j in range(1, n+1):
            result[j] += nodes[i][j]
    print(result.index(min(result)))