#include <bits/stdc++.h>
using namespace std;
template <class T> bool mini(T &x, const T &y) { return y < x ? x = y, 1 : 0; }
template <class T> bool maxi(T &x, const T &y) { return y > x ? x = y, 1 : 0; }
const int N = 1e5 + 1;
int n, m, S, T, U, V;
vector<pair<int, int>> adj[N];
long long dS[N], dT[N], dU[N], dV[N], f[N], g[N];
bool avail[N], mark[N];
void dijkstra(long long dist[], int s) {
memset(avail, 0, N);
memset(dist, 0x3f, 8 * N);
priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> q;
q.push({ dist[s] = 0, s });
while (q.size()) {
int u = q.top().second;
q.pop();
if (avail[u]) continue;
avail[u] = 1;
for (auto [v, w] : adj[u])
if (mini(dist[v], dist[u] + w)) q.push({ dist[v], v });
}
}
long long ans = 1e18;
void dfs(int u) {
if (avail[u]) return;
avail[u] = 1;
f[u] = dU[u];
g[u] = dV[u];
for (auto [v, w] : adj[u])
if (dS[v] + w + dT[u] == dS[T]) {
dfs(v);
mini(f[u], f[v]);
mini(g[u], g[v]);
}
mini(ans, f[u] + dV[u]);
mini(ans, g[u] + dU[u]);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> S >> T >> U >> V;
for (int i = 1, u, v, w; i <= m; i++) {
cin >> u >> v >> w;
adj[u].push_back({ v, w });
adj[v].push_back({ u, w });
}
dijkstra(dS, S);
dijkstra(dT, T);
dijkstra(dU, U);
dijkstra(dV, V);
memset(avail, 0, N);
memset(f, 0x3f, 8 * N);
memset(g, 0x3f, 8 * N);
dfs(T);
cout << min(dU[V], 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... |