Pagini recente » Cod sursa (job #619108) | Cod sursa (job #199562) | Cod sursa (job #2616272) | Cod sursa (job #295823) | Cod sursa (job #295795)
Cod sursa(job #295795)
#include <cstdio>
#include <cstring>
const int MAX_N = 505;
const int INF = 0x3f3f3f3f;
int p, n, m;
int c[MAX_N][MAX_N], d[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) scanf("%d", &d[i]);
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, rez = 0;
if (n % 2 == 0) --p;
d[0] = d[n + 1] = 1;
for (i = 1; i <= p; ++i)
sol += c[ d[i - 1] ][ d[i] ];
for (i = p; i; --i)
rez += c[ d[i + 1] ][ d[i] ];
printf("%d\n", (sol < rez) ? sol : rez);
}