#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, m, cnt, head[N], ans, dis[N], vis[N];
struct kkk{
int to, nxt, w;
}edge[N];
void add(int x,int y,int z){
edge[++cnt].to = y;
edge[cnt].w = z;
edge[cnt].nxt = head[x];
head[x] = cnt;
}
struct Node{
int dis, id;
bool operator < (const Node &x)const{
return x.dis < dis;
}
};
void init(){
for(int i = 1;i <= 2 * n;i++){
dis[i] = 0x3f3f3f3f;
}
}
priority_queue<Node> q;
void dijkstra(int s){
memset(vis, 0, sizeof vis);
init();
q.push((Node){0, s});
dis[s] = 0;
vis[s] = 1;
while(!q.empty()){
Node temp = q.top();
q.pop();
int u = temp.id;
if(!vis[u]){
vis[u] = 1;
for(int i = head[u];i;i = edge[i].nxt){
int v = edge[i].to;
if(dis[v] > dis[u] + edge[i].w){
dis[v] = dis[u] + edge[i].w;
if(!vis[v]){
q.push((Node){dis[v], v});
}
}
}
}
}
}
int main(){
//memset(head, -1, sizeof head);
cin >> n >> m;
for(int i = 1;i <= m;i++){
int u, v, w;
cin >> u >> v >> w;
add(u, v, w);
add(v + n, u + n, w);
}
dijkstra(1);
for(int i = 1;i <= n;i++){
ans += dis[i];
}
while(!q.empty()){
q.pop();
}
dijkstra(1 + n);
for(int i = 1 + n;i <= n * 2;i++){
ans += dis[i];
}
cout << ans;
}
昨天发现一个问题,改了,但还是不对