样例输出乱数,可能越界了
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=200020;
int n,m,s;
int dis[N],vis[N];
struct dege{
int v,w;
};
priority_queue<pair<int,int> > q;
vector <dege> a[N];
vector <dege> a1[N];
//第一遍
void meme(int s){
for(int i=0;i<=n;i++){
dis[i]=INT_MAX;
}
dis[s]=0;
q.push({0,s});
while(q.size()){
auto t=q.top();
q.pop();
int u=t.second;
if(vis[u]) continue;
vis[u]=1;
for(auto ed:a[u]){
int v=ed.v,w=ed.w;
if(dis[u]+w<dis[v]){
dis[v]=dis[u]+w;
q.push({-dis[v],v});
}
}
}
}
//第二遍
void meme1(int s){
for(int i=0;i<=n;i++){
dis[i]=INT_MAX;
}
dis[s]=0;
q.push({0,s});
while(q.size()){
auto t=q.top();
q.pop();
int u=t.second;
if(vis[u]) continue;
vis[u]=1;
for(auto ed:a1[u]){
int v=ed.v,w=ed.w;
if(dis[u]+w<dis[v]){
dis[v]=dis[u]+w;
q.push({-dis[v],v});
}
}
}
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
a[u].push_back({v,w});
a1[v].push_back({u,w});
}
meme(1);
int sam=0;
for(int i=1;i<=n;i++){
sam+=dis[i];
}
// for(int i=0;i<=m;i++){
// a[i].clear();
// }
while(q.size()){
q.pop();
}
meme1(1);
for(int i=1;i<=n;i++){
sam+=dis[i];
}
cout<<sam;
return 0;
}