This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
using lol=long long int;
#define endl "\n"
const lol mod1=1e9+7,mod2=998244353,mod3=100000000000000003,hashpr=31;
const lol inf=9e18+8;
const double eps=1e-12;
const double PI=acos(-1.0);
const int N=1e5+5;
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
using namespace __gnu_pbds;
using ordered_set_type=lol;
typedef tree<ordered_set_type,null_type,less<ordered_set_type>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
vector<pair<int,lol>> g[N];
vector<lol> d_s(N,inf),d_t(N,inf),d_u(N,inf),d_v(N,inf),m_s(N,inf),m_t(N,inf);
int n,m,s,t,u,v;
void shortest_path(int src,vector<lol>& d,vector<lol>& m,bool calc_m=false){
    //insert {-dist,v}
    priority_queue<pair<lol,int>> pq;
    pq.push({0,src});
    d[src]=0;
    if(calc_m)  m[src]=d_v[src];
    while(!pq.empty()){
        auto [ndist,u] = pq.top();
        pq.pop();
        if(-ndist>d[u])   continue;
        for(auto [v,w]:g[u]){
            if(d[u]+w<d[v]){
                d[v]=d[u]+w;
                pq.push({-d[v],v});
                if(calc_m){
                    m[v]=min({m[u],d_v[v]});
                }
            }else if(d[u]+w==d[v]){
                lol old=m[v];
                if(calc_m){
                    m[v]=min({m[v],m[u],d_v[v]});
                }
                if(old!=m[v]){
                    pq.push({-d[v],v});
                }
            }
        }
    }
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int _=1;
//cin>>_;
while(_--)
{
    cin>>n>>m>>s>>t>>u>>v;
    for(int i=0;i<m;i++){
        lol a,b,c;
        cin>>a>>b>>c;
        g[a].push_back({b,c});
        g[b].push_back({a,c});
    }
    shortest_path(u,d_u,m_s);
    shortest_path(v,d_v,m_s);
    shortest_path(s,d_s,m_s,true);
    shortest_path(t,d_t,m_t,true);
    lol ans=inf;
    for(int i=1;i<=n;i++){
        if(d_s[i]+d_t[i]==d_s[t]){
            lol du=d_u[i];
            lol dv=min(m_s[i],m_t[i]);
            ans=min(ans,du+dv);
        }
    }
    cout<<min(d_u[v],ans);
}
return 0;
}
| # | 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... |