#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define pii pair<int,int>
#define fi first
#define se second
#define inf 1e18
#define ti tuple<int,int,int>
#define meekucaon ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
const int mod=1e9+7;
int sf(int a){return (a+mod)%mod;}
int kal(int a,int b){return (sf(a)*sf(b))%mod;}
int tam(int a,int b){return (sf(a)+sf(b))%mod;}
int kur(int a,int b){return (sf(a)+mod-sf(b))%mod;}
const int lim=100000;
vector<pii>g[lim+10];
vector<int>diss,dist,disv;
int n,m,s,t,a,b;
vector<int> cari(int aw){
priority_queue<pii,vector<pii>,greater<pii>>q;
vector<int>disc(n+10,inf);
disc[aw]=0;
q.push({0,aw});
while(q.size()){
auto [dis,u]=q.top();
q.pop();
if(disc[u]<dis) continue;
for(auto [v,w]:g[u]){
if(disc[v]<=dis+w) continue;
disc[v]=dis+w;
q.push({disc[v],v});
}
}
return disc;
}
signed main(){
meekucaon
cin>>n>>m>>s>>t>>a>>b;
for(int i=1;i<=m;i++){
int u,v,w;cin>>u>>v>>w;
g[u].pb({v,w});
g[v].pb({u,w});
}
diss=cari(s);
// for(int i=1;i<=n;i++)cout<<diss[i]<<" ";
// cout<<endl;
dist=cari(t);
// for(int i=1;i<=n;i++)cout<<dist[i]<<" ";
// cout<<endl;
int stdis=diss[t];
for(int u=1;u<=n;u++){
for(auto &[v,w]:g[u]){
if(diss[v]+w==diss[u] && dist[u]+w==dist[v] && dist[u]+w+diss[v]==stdis) w=0;
if(diss[u]+w==diss[v] && dist[v]+w==dist[u] && diss[u]+w+dist[v]==stdis) w=0;
}
}
disv=cari(a);
cout<<disv[b];
}
// cari shortest path dari s dan t
// cari minimum fare dari a ke b
// known stuff
// 1. kita bisa cek edge ini masuk shortest route or not
// 2. dari semua yang kita ketahui -> minimum spanning tree dari u ke v?
// 3. harus tau shortest route mana yang dipakai untuk s ke t
// 4. mending pick route yang mana
// 5. kalau satu arah tinggal cek dikurangin shortest route yang ada
// subsoal
// 1. kalau masuk dalam shortest path = weight 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... |