Cod sursa(job #295777)

Utilizator raduzerRadu Zernoveanu raduzer Data 3 aprilie 2009 17:51:01
Problema Team Scor 5
Compilator cpp Status done
Runda Simulare Marime 0.84 kb
#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;

	d[0] = d[n + 1] = 1;

	for (i = 1; i <= p; ++i)
		sol += c[ d[i - 1] ][ d[i] ];

	for (i = n; i; --i)
		rez += c[ d[i + 1] ][ d[i] ];

	printf("%d\n", (sol < rez) ? sol : rez);
}