1 条题解

  • 0
    @ 2025-2-14 21:30:05

    C++ :

    #include <cstdio>
    #include <cstring>
    #include <queue>
    #define INF 0x70000000
    using namespace std;
    int n, m, p, q;
    int City[1001][1001], troop[101];
    bool vis[1001];
    queue<int> que;
    int bfs(){
        int cur = q, time, i;
        memset(vis, 0, sizeof(vis));
        vis[cur] = true;
        que.push(q);
        while(!que.empty()){
            cur = que.front(); que.pop();
            time = City[cur][0];
            for(i = 1; i <= m; i++){
                if(City[cur][i]){
                    if(!vis[i]){
                        City[i][0] = time + City[cur][i];
                        vis[i] = true;
                        que.push(i);
                    }else if(time + City[cur][i] < City[i][0]){
                        City[i][0] = time + City[cur][i];
                    }
                }
            }
        }
        int min = INF;
        for(i = 1; i <= n; i++){
            int tmp = City[troop[i]][0];
            min = tmp < min ? tmp : min;
        }
        return min;
    }
    int main(){
        int i, a, b, t;
        while(~scanf("%d%d%d%d", &n, &m, &p, &q)){
            memset(troop, 0, sizeof(troop));
            memset(City, 0, sizeof(City));
            for(i = 1; i <= n; i++) scanf("%d", &troop[i]);
            for(i = 1; i <= p; i++){
                scanf("%d%d%d", &a, &b, &t);
                City[b][a] = City[a][b] = t;
                City[i][0] = 0;
            }
            printf("%d\n", bfs());
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    952
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者