#include <bits/stdc++.h>
#define ve vector
#define ar array
#define pb push_back
#define ins insert
#define endl '\n'
#define ll long long
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, M;
cin >> N >> M;
int S, T;
cin >> S >> T;
int U, V;
cin >> U >> V;
ve<pair<int, ll>> adj[N+1];
for(int i = 0; i < M; i++){
int a, b, c;
cin >> a >> b >> c;
adj[a].pb({b, c});
adj[b].pb({a, c});
}
set<ar<ll, 3>> pq;
ve<ll> distv(N+1, 1e18);
// ve<ll> distu(N+1, 1e18);
// pq.insert({0, -1, U});
// while(!pq.empty()){
// auto [cst, _, sor] = *pq.begin();
// pq.erase(pq.begin());
// if(cst < distu[sor]){
// distu[sor] = cst;
// for(auto [x, c] : adj[sor]){
// pq.insert({cst + c, _, x});
// }
// }
// }
pq.insert({0, -1, V});
while(!pq.empty()){
auto [cst, _, sor] = *pq.begin();
pq.erase(pq.begin());
if(cst < distv[sor]){
distv[sor] = cst;
for(auto [x, c] : adj[sor]){
pq.insert({cst + c, _, x});
}
}
}
ve<ll> dists(N+1, 1e18);
ve<ll> ans(N+1, distv[S]+1);
pq.insert({0, distv[S], S});
while(!pq.empty()){
auto [cst, rel, sor] = *pq.begin();
pq.erase(pq.begin());
if(cst <= dists[sor] && rel < ans[sor]){
dists[sor] = cst;
ans[sor] = rel;
for(auto [x, c] : adj[sor]){
ll n_rel = min(rel, distv[x]);
pq.insert({cst + c, n_rel, x});
}
}
}
cout << ans[T] << endl;
}
# | 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... |