2 条题解

  • 1
    @ 2025-11-27 16:34:25
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int n,m,s,cnt;
    long long dis1[N],dis2[N],ans;
    bool vis[N];
    vector<pair<int,int>> G1[N],G2[N];
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
    void dijkstra1(){
        q.push({0,s});
        while(q.size()){
            int now=q.top().second;
            q.pop();
            if(vis[now]){
                continue;
            }
            vis[now]=1;
            for(auto it:G1[now]){
                int x=it.first,y=it.second;
                if(dis1[x]>dis1[now]+y){
                    dis1[x]=dis1[now]+y;
                    q.push({dis1[x],x});
                }
            }
        }
        return ;
    }
    void dijkstra2(){
        while(q.size()){
            q.pop();
        }
        q.push({0,s});
        while(q.size()){
            int now=q.top().second;
            q.pop();
            if(vis[now]){
                continue;
            }
            vis[now]=1;
            for(auto it:G2[now]){
                int x=it.first,y=it.second;
                if(dis2[x]>dis2[now]+y){
                    dis2[x]=dis2[now]+y;
                    q.push({dis2[x],x});
                }
            }
        }
        return ;
    }
    int main(){
        ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
        s=1;
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            dis1[i]=dis2[i]=1e18;
        }
        dis1[s]=0;dis2[s]=0;
        for(int i=1;i<=m;i++){
            int value,u,v;
            cin>>u>>v>>value;
            G1[u].push_back({v,value});
            G2[v].push_back({u,value});
        }
        dijkstra1();
        memset(vis,0,sizeof(vis));
        dijkstra2();
        for(int i=1;i<=n;i++){
            ans+=dis1[i]+dis2[i];
        }
        cout<<ans;
        return 0;
    }
    
    

    信息

    ID
    5687
    时间
    1000ms
    内存
    125MiB
    难度
    5
    标签
    递交数
    11
    已通过
    7
    上传者