3 条题解

  • 3
    @ 2025-7-4 15:47:06

    暴力版本

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int n, m, s;
    
    struct Edge {
        int u, v, w;
    };
    
    vector<Edge> adj[10010];
    int dis[10010];
    int vis[10010];
    
    void dijkstra(int s) {
        for(int i = 1; i <= n; ++i){
            dis[i] = INT_MAX;
            vis[i] = 0;
        }
    
        dis[s] = 0;
    
        while(1){
            int u = 0;
            for( int i = 1;i <= n; ++i){
                if(!vis[i] && (u == 0 || dis[i] < dis[u])){
                    u = i;
                }
            }
            if(u == 0){
                break;
            }
            vis[u] = 1;
            for(int  i = 0;i < adj[u].size(); ++i){
                int v = adj[u][i].v;
                if(dis[v] > dis[u] + adj[u][i].w){
                    dis[v] = dis[u] + adj[u][i].w;
                }
            }
        }
    }
    
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
        cin >> n >> m >> s;
    
        for(int i = 1; i<= m;++i){
            int u, v, w;
            cin >> u >> v >> w;
            adj[u].push_back({u, v, w});
        }
        dijkstra(s);
    
        for(int i = 1; i <= n; ++i){
            cout << dis[i] << " ";
        }
    
        return 0;
    }
    
    

    信息

    ID
    2408
    时间
    1000ms
    内存
    512MiB
    难度
    7
    标签
    递交数
    35
    已通过
    10
    上传者