#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define ins insert
#define all(x) x.begin(), x.end()
#define F first
#define S second
const int N = 2e5 + 7;
int d[N], d1[N], d2[N], n, m, used[N], s, t, u, v, ans = 1e18;
int dp[N][2];
vector<pair<int, int>>g[N];
void dijkstra(int st, int fi){
for(int i = 1; i <= n; i++){
d[i] = 1e18;
used[i] = 0;
dp[i][0] = dp[i][1] = 1e18;
}
priority_queue<array<int, 3>>q;
d[st] = 0;
q.push({0, st, st});
while(q.size()){
int we = -q.top()[0], v = q.top()[1], pr = q.top()[2];
q.pop();
if(used[v] && we == d[v]){
dp[v][0] = min(dp[v][0], dp[pr][0]);
dp[v][1] = min(dp[v][1], dp[pr][1]);
}
else{
dp[v][0] = min(d1[v], dp[pr][0]);
dp[v][1] = min(d2[v], dp[pr][1]);
used[v] = 1;
for(auto [to, w] : g[v]){
if(d[to] > d[v] + w){
d[to] = d[v] + w;
q.push({-d[to], to, v});
}
}
}
}
ans = min(ans, dp[fi][0] + dp[fi][1]);
}
void dijkstra1(int s){
for(int i = 1; i <= n; i++){
used[i] = 0;
d1[i] = 1e18;
}
d1[s] = 0;
priority_queue<pair<int, int>>q;
q.push({0, s});
while(q.size()){
int v = q.top().second;
q.pop();
if(used[v]) continue;
used[v] = 1;
for(auto [to, w] : g[v]){
if(d1[to] > d1[v] + w){
d1[to] = d1[v] + w;
q.push({-d1[to], to});
}
}
}
}
void dijkstra2(int s){
for(int i = 1; i <= n; i++){
used[i] = 0;
d2[i] = 1e18;
}
d2[s] = 0;
priority_queue<pair<int, int>>q;
q.push({0, s});
while(q.size()){
int v = q.top().second;
q.pop();
if(used[v]) continue;
used[v] = 1;
for(auto [to, w] : g[v]){
if(d2[to] > d2[v] + w){
d2[to] = d2[v] + w;
q.push({-d[to], to});
}
}
}
}
void solve(){
cin>>n>>m>>s>>t>>u>>v;
for(int i = 1; i <= m; i++){
int a, b, w;
cin>>a>>b>>w;
g[a].pb({b, w});
g[b].pb({a, w});
}
dijkstra1(u);
dijkstra2(v);
dijkstra(s, t);
dijkstra(t, s);
cout<<ans;
}
signed main(){
ios_base :: sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
//cin>>t;
while(t--){
solve();
}
}
# | 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... |