#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 7;
vector<pair<int , ll>> adj[N];
int n , m , s , t , u , v;
void getInput(){
cin >> n >> m >> s >> t >> u >> v;
s-- , t-- , u-- , v--;
for(int i = 0; i < m; i++){
int u , v;
ll w;
cin >> u >> v >> w;
u-- , v--;
adj[u].push_back({v , w});
adj[v].push_back({u , w});
}
}
ll bestX[N];
ll bestVX[N];
vector<ll> du , dv , dt , ds;
vector<ll> dijkstra(int src){
vector<ll> d(n , 1e18);
for(int i = 0; i < n; i++) bestX[i] = 1e18;
for(int i = 0; i < n; i++) bestVX[i] = 1e18;
set<pair<ll , pair<int , int>>> que;
que.insert({0 , {src , -1}});
while(que.size() > 0){
pair<ll , pair<int , int>> first = *(que.begin());
que.erase(que.begin());
int u = first.second.first;
int par = first.second.second;
ll w = first.first;
if(w > d[u]) continue;
if(w < d[u]){
d[u] = w;
for(auto v: adj[u]){
if(d[v.first] == (ll)1e18) que.insert({d[u] + v.second , {v.first , u}});
}
}
if(par != -1){
bestX[u] = min({bestX[u] , bestX[par] , du[par]});
bestVX[u] = min({bestVX[u] , bestVX[par] , dv[par]});
}
}
return d;
}
void calcShortPaths(){
du.resize(n , 1e18);
dv.resize(n , 1e18);
du = dijkstra(u);
dv = dijkstra(v);
dt = dijkstra(t);
ds = dijkstra(s);
}
ll solve(){
ll ans = du[v];
for(int i = 0; i < n; i++){
if(ds[t] != ds[i] + dt[i]) continue; // it is not a valid y
ans = min(ans , bestX[i] + dv[i]);
ans = min(ans , bestVX[i] + du[i]);
}
return ans;
}
int main(){
ios_base::sync_with_stdio(0) , cin.tie(0) , cout.tie(0);
getInput();
calcShortPaths();
cout << solve() << endl;
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... |