Cod sursa(job #295662)
#include <cstdio>
#include <cstring>
const int MAX_N = 505;
const int INF = 0x3f3f3f3f;
int p, n, m;
int c[MAX_N][MAX_N];
int main()
{
int i, j, k, x, y, z;
freopen("team.in", "r", stdin);
freopen("team.out", "w", stdout);
scanf("%d %d %d", &p, &n, &m);
memset(c, INF, sizeof(c));
for (i = 1; i <= m; ++i)
{
scanf("%d %d %d", &x, &y, &z);
c[x][y] = c[y][x] = z;
}
for (i = 1; i <= n; ++i) c[i][i] = 0;
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
for (k = 1; k <= n; ++k)
if (k != i && k != j && c[i][k] + c[j][k] < c[i][j]) c[i][j] = c[j][i] = c[i][k] + c[j][k];
int sol = 0, p = 1, p2;
for (i = 1; i <= n; ++i)
{
scanf("%d", &p2);
sol += c[p][p2];
p = p2;
}
printf("%d\n", sol);
}