// #pragma optimize ("g",on)
// #pragma GCC optimize ("inline")
// #pragma GCC optimize ("Ofast")
// #pragma GCC optimize ("unroll-loops")
// #pragma GCC optimize ("03")
#include <bits/stdc++.h>
#define pb push_back
#define SS ios_base::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
#define int long long
#define all(v) v.begin(),v.end()
using namespace std;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
const int N = 2e5 + 1, inf = 1e18, mod = 998244353;
vector<array<int, 3>> g[N];
int ok[N], tin[N], tout[N], timer, used[N], dv[N], du[N];
vector<vector<int>> p;
vector<array<int, 3>> e(N);
int ans = inf;
void dfs(int v, int mnu, int mnv){
mnu = min(mnu, du[v]);
mnv = min(mnv, dv[v]);
ans = min(ans, mnu + mnv);
for(int to : p[v]){
dfs(to, mnu, mnv);
}
}
void solve(){
int n, m;
cin >> n >> m;
p.resize(n + 1);
int s, t;
cin >> s >> t;
int u, v;
cin >> u >> v;
for(int i = 1; i <= m; i++){
int u, v, w;
cin >> u >> v >> w;
e[i] = {u, v, w};
g[u].push_back({v, w, i});
g[v].push_back({u, w, i});
}
for(int i = 1; i <= n; i++) du[i] = dv[i] = inf;
vector<int> dist(n + 1, inf);
priority_queue<pair<int, int>> q;
q.push({0, s});
dist[s] = 0;
while(q.size()){
auto [musor, v] = q.top();
q.pop();
musor = -musor;
if(musor != dist[v]) continue;
for(auto [to, w, id] : g[v]){
if(dist[to] == dist[v] + w) p[to].push_back(v);
else if(dist[to] > dist[v] + w){
p[to].clear();
p[to].push_back(v);
dist[to] = dist[v] + w;
q.push({-dist[to], to});
}
}
}
q.push({0, u});
du[u] = 0;
while(q.size()){
auto [musor, v] = q.top();
q.pop();
musor = -musor;
if(musor != du[v]) continue;
for(auto [to, w, id] : g[v]){
if(du[to] > du[v] + w){
du[to] = du[v] + w;
q.push({-du[to], to});
}
}
}
q.push({0, v});
dv[v] = 0;
while(q.size()){
auto [musor, v] = q.top();
q.pop();
musor = -musor;
if(musor != dv[v]) continue;
for(auto [to, w, id] : g[v]){
if(dv[to] > dv[v] + w){
dv[to] = dv[v] + w;
q.push({-dv[to], to});
}
}
}
dfs(t, inf, inf);
cout << min(ans, du[v]);
}
signed main(){
SS
// freopen("trains.in", "r", stdin);
// freopen("trains.out", "w", stdout);
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... |