This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//ashoori is my love
//ashoori is my love//ashoori is my love//ashoori is my love//ashoori is my love//ashoori is my love
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef int it;
typedef pair<ll, ll> pii;
typedef pair<ll, pii> piii;
#pragma GCC optimize ("O3")
#pragma GCC target("avx2")
#pragma GCC optimize("unroll-loops,Ofast")
#define sep  "\n"
#define pes  " "
#define int long long
#define print(x,n) for(int i=1; i<=n ; i++)cout<<x[i]<<" "
#define scan(x,n) for(int i=1 ; i<=n ; i++)cin>>x[i]
#define all(x) x.begin(), x.end()
#define pb push_back
#define F first
#define Se second
#define sz size
#define cin2(r,j) cin>>r>>j
#define cin1(r) cin>>r
#define cin3(r,j,k) cin>>r>>j>>k
# define InTheNameOfGod                                  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int maxx=1e5+1000;
const ll MOD=1000000007;
const ll inf=1e18;
int S,T,U,V,n,m;
vector<pii> g[maxx];
vector<ll> distances[maxx];
void dij(int v , int T)
{
    vector<ll> ashoori(maxx-10);
    for(int i =  1 ; i <= n+10 ; i++)ashoori[i] = inf;
     priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>> pq;
     ashoori[v]=0;
    pq.push({0,v});
    while(!pq.empty()){
        int node = pq.top().Se;
        int ce = pq.top().F;
        pq.pop();
        if(ce!=ashoori[node])continue;
        for(auto U : g[node]){
            if(ashoori[node] + U.Se < ashoori[U.F]){
                ashoori[U.F] = ashoori[node] + U.Se;
                pq.push({ashoori[U.F],U.F});
            }
        }
    }
    for(int i = 0 ; i <= n ; i++){
        distances[T].pb(ashoori[i]);
    }
}
bool comp(int a,int b){
    return distances[S][a]<distances[S][b];
}
void solve(){
    cin>>n>>m>>S>>T>>U>>V;
    for(int i = 1 ; i <= m ; i++){
        int u , v , c;
        cin>>u>>v>>c;
        g[u].pb({v,c});
        g[v].pb({u,c});
    }
    dij(T , T);
    dij(S , S);
    dij(U , U );
    dij(V , V);
    /*for(auto J : distances[V])cout<<J<<" ";
    cout<<"\n";*/
    int mn[maxx];
    for(int i = 0 ; i < maxx ; i++)mn[i] = inf;
    vector<int> nodes;
    for(int i = 1 ; i <= n ; i++){
        if(distances[S][i] + distances[T][i] == distances[S][T])nodes.pb(i);
    }
    sort(all(nodes),comp);
    int answer = inf;
    for(int i = 0 ; i < nodes.sz() ; i ++){
        mn[nodes[i]] = distances[U][nodes[i]];
        for(auto K : g[nodes[i]]){
            mn[nodes[i]] = min(mn[nodes[i]] , mn[K.F]);
        }
        answer = min(mn[nodes[i]] + distances[V][nodes[i]],answer);
    }
    for(int i = 0 ; i < maxx ; i++)mn[i] = inf;
    for(int i = 0 ; i < nodes.sz() ; i ++){
        mn[nodes[i]] = distances[V][nodes[i]];
        for(auto K : g[nodes[i]]){
            mn[nodes[i]] = min(mn[nodes[i]] , mn[K.F]);
        }
        answer = min(mn[nodes[i]] + distances[U][nodes[i]],answer);
    }
    cout<<answer;
}
/*===========================================================================================================================*/
signed main(){
    //InTheNameOfGod;
    //int tt = clock();
    //cout << fixed << setprecision(6);
    int tc = 1;
    //cin>>tc;
    //for(int i = 1 ; i <= 3 ; i++)cout<<dp[i]<<" ";
    while(tc--){solve();
        //cerr << "TIME = " << clock() - tt << endl;
        //tt = clock();
        }
}
Compilation message (stderr)
commuter_pass.cpp: In function 'void solve()':
commuter_pass.cpp:100:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  100 |     for(int i = 0 ; i < nodes.sz() ; i ++){
      |                     ~~^~~~~~~~~~~~
commuter_pass.cpp:110:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  110 |     for(int i = 0 ; i < nodes.sz() ; i ++){
      |                     ~~^~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |