#include<bits/stdc++.h>
using namespace std;
/*panda*/
#define pb push_back
#define pii pair<ll,ll>
#define f(i,a,b) for(ll i = a;i<=b;i++)
#define f_(i,a,b) for(ll i = a;i>=b;i--)
typedef long long ll;
typedef unsigned long long ull;
const ll N =2e6+10;
ll n,m;
ll final[N],k,d[N],d1[N];
bool f[N];
struct node{
ll from,to,pre,len;
}ar[N];
struct node1{
ll from,to,pre,len;
}br[N];
ll final1[N],k1;
void add(ll u,ll v,ll len){
ar[++k] = {u,v,final[u],len};
final[u] = k;
}
void add2(ll u,ll v,ll len){
br[++k1] = {u,v,final1[u],len};
final1[u] = k1;
}
void panda1(){
priority_queue<pii,vector<pii> > hp;
hp.push({0,1});
memset(d,0x7f,sizeof(d));
d[1] = 0;
while(!hp.empty()){
pii h = hp.top();
hp.pop();
ll dis = h.first,fr = h.second;
if(f[fr])continue;
f[fr] = 1;
for(ll i = final[fr];i;i = ar[i].pre){
ll to = ar[i].to;
if(d[fr] + ar[i].len < d[to]){
d[to] = d[fr] + ar[i].len;
hp.push({-d[to],to});
}
}
}
}
void panda2(){
priority_queue<pii,vector<pii> > hp;
memset(f,0,sizeof(f));
hp.push({0,1});
memset(d1,0x7f,sizeof(d1));
d1[1] = 0;
while(!hp.empty()){
pii h = hp.top();
hp.pop();
ll dis = h.first,fr = h.second;
// cout<<d[fr]<<fr<<" ";
if(f[fr])continue;
f[fr] = 1;
for(ll i = final1[fr];i;i = br[i].pre){
ll to = br[i].to;
if(d1[fr] + br[i].len < d1[to]){
d1[to] = d1[fr] + br[i].len;
hp.push({-d1[to],to});
}
}
}
}
int main(){
cin>>n>>m;
ll x,y,l;
f(i,1,m){
scanf("%lld%lld%lld",&x,&y,&l);
add(x,y,l);
add2(y,x,l);
}
panda1();
ll ans = 0;
panda2();
f(i,1,n){
ans += d[i]+d1[i];
}
cout<<ans;
return 0;
}
不加负号就前三个点错