#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <ll,ll> ii;
typedef pair <ii,ll> iii;
#define pb push_back
#define fi first
#define se second
#define endl '\n'
#define MOD 1000000007
const int N = 2e6;
ll n,m;
ll s,t,u,v;
ll ds[1000005];
ll dt[1000005];
ll du[1000005];
ll dv[1000005];
vector <ii> a[1000005];
priority_queue <ii,vector<ii>,greater<ii>> q;
void ditcha(ll d[],ll x){
for (long i=1; i<=n; i++) d[i] = 1e15;
d[x] = 0;
q.push({0,x});
while (!q.empty()){
ii t = q.top(); q.pop();
if (t.fi != d[t.se]) continue;
for (ii i : a[t.se]){
if (d[i.fi] > d[t.se] + i.se){
d[i.fi] = d[t.se] + i.se;
q.push({d[i.fi],i.fi});
}
}
}
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin >> n >> m;
cin >> s >> t;
cin >> u >> v;
for (long i=1; i<=m; i++){
ll u,v,w; cin >> u >> v >> w;
a[u].pb({v,w});
a[v].pb({u,w});
}
ditcha(ds,s);
ditcha(dt,t);
for (long i=1; i<=n; i++){
for (ii it : a[i]){
if (ds[i] + dt[it.fi] + it.se == ds[t]) a[i].pb({it.fi,0});
}
}
ditcha(du,u);
ditcha(dv,v);
cout << min(du[v],dv[u]);
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... |