uscao 3.2 Sweet Butter
来源:互联网 发布:网络机顶盒软件下载 编辑:程序博客网 时间:2024/06/07 10:02
/*ID:rayafjy1PROG:butterLANG:C++*/#include <iostream>#include <stdio.h>#include <string.h>#include <queue>#define MAX_N 801#define INF 9999999using namespace std;int n, m, c, map[MAX_N][MAX_N], a[MAX_N], dist[MAX_N], ct[MAX_N][MAX_N];bool vis[MAX_N];void SPFA(int s) { int i; memset(vis, 0, sizeof(vis)); for (i = 1; i <= n; i++) dist[i] = INF; dist[s] = 0; vis[s] = 1; queue<int> q; q.push(s); while (!q.empty()) { int p = q.front(); q.pop(); for (i = 1; i <= ct[p][0]; i++) { int t = ct[p][i]; if ((dist[t] > dist[p] + map[p][t])) { dist[t] = dist[p] + map[p][t]; if (!vis[t]) q.push(t); vis[t] = 1; } } vis[p] = 0; }}int main() { freopen("butter.in", "r", stdin); freopen("butter.out", "w", stdout); int i, j, x, y, z; while (scanf("%d%d%d", &c, &n, &m) != EOF) { memset(a, 0, sizeof(a)); memset(ct, 0, sizeof(ct)); for (i = 0; i < n; i++) for (j = 0; j < n; j++) map[i][j] = INF; for (i = 0; i < c; i++) { scanf("%d", &x); a[x]++; } for (i = 0; i < m; i++) { scanf("%d%d%d", &x, &y, &z); map[x][y] = map[y][x] = z; ct[x][0]++; ct[x][ct[x][0]] = y; ct[y][0]++; ct[y][ct[y][0]] = x; } int output = INF, sum; for (i = 1; i <= n; i++) { sum = 0; SPFA(i); for (j = 1; j <= n; j++) sum += a[j] * dist[j]; output = min(output, sum); } printf("%d\n", output); } return 0;}