#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<pair<int,int>>adj[200005];
int dis[200005];
int inf=1e15;
vector<int>back[200005];
int vis[200005];
int n,m;
vector<pair<int,int>>edge;
void dijkstra(int s){
priority_queue<pair<int,pair<int,int>>,vector<pair<int,pair<int,int>>>,greater<pair<int,pair<int,int>>>>pq;
for(int i=1;i<=n;i++)dis[i]=inf;
pq.push({0,{s,s}});
while(!pq.empty()){
auto [d,x]=pq.top();
int u=x.first;
int p=x.second;
pq.pop();
if(d<=dis[u])back[u].push_back(p);
if(d>=dis[u])continue;
dis[u]=d;
for(auto x:adj[u]){
pq.push({x.second+d,{x.first,u}});
}
}
}
void bt(int u,int s){
if(u==s)return;
for(auto x:back[u]){
if(!vis[x])edge.push_back({x,u}),bt(x,u),vis[x]=1;
}
}
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
int s,t;cin>>s>>t;
int u,v;cin>>u>>v;
for(int i=0;i<m;i++){
int a,b,c;cin>>a>>b>>c;
adj[a].push_back({b,c});
adj[b].push_back({a,c});
}
dijkstra(s);
//for(int i=1;i<=n;i++)cerr<<dis[i]<<" ";
//cerr<<"\n";
vis[t]=1;
bt(t,s);
for(auto x:edge){
adj[x.first].push_back({x.second,0});
}
int ans=inf;
dijkstra(u);
//for(int i=1;i<=n;i++)cerr<<dis[i]<<" ";
//cerr<<"\n";
ans=min(ans,dis[v]);
dijkstra(v);
ans=min(ans,dis[u]);
cout<<ans;
}
# | 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... |