25分:
  • 板块P1342 请柬
  • 楼主syzxzzx250
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/25 11:28
  • 上次更新2025/1/25 11:50:44
查看原帖
25分:
1345537
syzxzzx250楼主2025/1/25 11:28
#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,w,dis[1000005],f[1000005],ans;
struct e{
    int v,w;
    bool operator<(const e &a)const{
        return this->w<a.v;
    }
};
vector<e>e1[1000005],e2[1000005];
void dijkstra1(){
    memset(dis,0x3f,sizeof(dis));
    priority_queue<e>q;
    q.push({1,0});
    dis[1]=0;
    while(q.size()){
        u=q.top().v;
        q.pop();
        if(f[u])continue;
        f[u]=1;
        for(auto &i:e1[u])
            if(dis[i.v]>dis[u]+i.w){
                dis[i.v]=dis[u]+i.w;
                q.push({i.v,-dis[i.v]});
            }
    }
}
void dijkstra2(){
    memset(f,0,sizeof(f));
    memset(dis,0x3f,sizeof(dis));
    priority_queue<e>q;
    q.push({1,0});
    dis[1]=0;
    while(q.size()){
        u=q.top().v;
        q.pop();
        if(f[u])continue;
        f[u]=1;
        for(auto &i:e2[u])
            if(dis[i.v]>dis[u]+i.w){
                dis[i.v]=dis[u]+i.w;
                q.push({i.v,-dis[i.v]});
            }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    while(m--){
        scanf("%d%d%d",&u,&v,&w);
        e1[u].push_back({v,w});
        e2[v].push_back({u,w});
    }
    dijkstra1();
    for(int i=1;i<=n;i++)ans+=dis[i];
    dijkstra2();
    for(int i=1;i<=n;i++)ans+=dis[i];
    printf("%d",ans);
    return 0;
}
2025/1/25 11:28
加载中...