1 条题解

  • 1
    @ 2025-11-15 15:52:02
    #include<bits/stdc++.h>
    using namespace std;
    const int N=3e5+10;
    int n,m,s,cnt;
    long long dis[N];
    bool vis[N];
    vector<pair<int,int>> G[N];
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
    void dijkstra(){
        q.push({0,s});
        while(q.size()){
            int now=q.top().second;
            q.pop();
            if(vis[now]){
                continue;
            }
            vis[now]=1;
            for(auto it:G[now]){
                int x=it.first,y=it.second;
                if(dis[x]>dis[now]+y){
                    dis[x]=dis[now]+y;
                    q.push({dis[x],x});
                }
            }
        }
        return ;
    }
    int main(){
        ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
        cin>>n>>m;
        s=1;
        for(int i=1;i<=n;i++){
            dis[i]=1e18;
        }
        dis[s]=0;
        for(int i=1;i<=m;i++){
            int value,u,v;
            cin>>u>>v>>value;
            G[u].push_back({v,value});
        }
        dijkstra();
        for(int i=1;i<=n;i++){
            if(dis[i]==1e18){
                dis[i]=-1;
            }
            cout<<dis[i]<<" ";
        }
        return 0;
    }
    
    
    
    • 1

    信息

    ID
    4618
    时间
    2000ms
    内存
    512MiB
    难度
    5
    标签
    (无)
    递交数
    8
    已通过
    7
    上传者