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;}

原创粉丝点击