1 条题解

  • 0
    @ 2025-6-22 14:17:45
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef pair<ll,int> PII;
    const ll INF=LLONG_MAX;
    const int N=1e5+10;
    bool st[N];
    ll dist[N];
    struct edge{
        int v;
        ll w;
    };
    vector<edge> adj[N];
    int n,m;
    void Dijkstra(){
        fill(dist+1,dist+n+1,INF);
        priority_queue<PII,vector<PII>,greater<PII>>q;
        q.push({0,1});
        dist[1] = 0 ;
        while(!q.empty())
        {
            int u = q.top().second;q.pop();
            if(st[u]) continue;
            st[u] = true;
            for(int i = 0 ; i < adj[u].size();i++)
            {
                int v = adj[u][i].v;
                ll w = adj[u][i].w;
                if(dist[u] + w < dist[v])
                {
                    
                    dist[v] = dist[u] + w;
                    
                    q.push({dist[v],v});
                }
            }
            
            
        }
        
    }
    int main(){
        cin>>n>>m;
        for(int i=1;i<=m;i++){
            int u,v,w;
            cin>>u>>v>>w;
            adj[u].push_back({v,w});
        }
        Dijkstra();
        if(dist[n]==INF) cout<<-1;
        else cout<<dist[n];
        return 0;
    }
    
    • 1

    信息

    ID
    8505
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    10
    已通过
    2
    上传者