第三题,简单的最短路,看下数据不大,用的简单的 Floyd算法 就可以过(AC) PS:之前发的贴不知道为什么删除了,本着赛后互相分享,互相讨论的初衷,没啥违规的吧== 参考代码: #include <string.h> #include <stdio.h> #include <iostream> #include <algorithm> using namespace std; const int maxn = 1005; const int INF = 99999999; int map[maxn][maxn], dist[maxn]; bool visit[maxn]; int N,P,C; void init()     //初始化 {     int i, j;     for(i = 0; i < maxn; i++)     {         for(j = 0; j < maxn; j++)         {             if(i == j)                 map[i][j] = 0;             else                 map[i][j] = map[j][i] = INF;         }     } } void input()    //输入函数 {     int vi, vj, cost;     while(P--)     {         scanf("%d %d %d", &vi, &vj, &cost);         if(cost < map[vi][vj])             map[vi][vj] = map[vj][vi] = cost;     } } void floyd()    //Floyd算法 {     int i, j, k;     for(k = 0; k <=N; k++)     //k为中间点         for(i = 0; i <= N; i++)             for(j = 0; j <= N; j++)                 if(map[i][k] + map[k][j] <  map[i][j])                     map[i][j] = map[i][k] + map[k][j]; } int main() {   // freopen("in.txt","r",stdin);     while(cin>>N>>P>>C)     {         init();         input();         floyd();         int sum = 0;         for(int i=0; i<C; ++i)         {             int v;cin>>v;             sum+=map[0][v];         }         printf("%d\n", sum);     }     return 0; }
点赞 5
牛客网
牛客企业服务