This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, M, S, T, U, V;
cin >> N >> M >> S >> T >> U >> V;
S--, T--, U--, V--;
vector<vector<pair<int, int>>> adj(N);
for (int i = 0; i < M; i++) {
int u, v, w;
cin >> u >> v >> w;
u--, v--;
adj[u].emplace_back(v, w);
adj[v].emplace_back(u, w);
}
auto dijkstra = [&](vector<int64_t>& d, int source) {
fill(d.begin(), d.end(), 1e18);
d[source] = 0;
priority_queue<pair<int64_t, int>> pq;
pq.emplace(0, source);
while (pq.size()) {
auto [du, u] = pq.top();
pq.pop();
if (d[u] != -du) continue;
for (auto [v, w] : adj[u]) {
if (d[v] > -du + w) {
d[v] = -du + w;
pq.emplace(-d[v], v);
}
}
}
};
vector<int64_t> dS(N), dT(N), dU(N), dV(N);
dijkstra(dS, S);
dijkstra(dT, T);
dijkstra(dU, U);
dijkstra(dV, V);
int64_t min_dist = dS[T];
auto calc = [&](const vector<int64_t>& ds, const vector<int64_t>& dt, const vector<int64_t>& du, vector<int64_t>& best, int s) {
fill(best.begin(), best.end(), 1e18);
vector<int> topo;
vector<int> vis(N, 0);
function<void(int)> toposort = [&](int u) {
vis[u] = 1;
for (auto [v, w] : adj[u]) {
if (ds[u] + w == min_dist - dt[v] && vis[v] == 0) {
toposort(v);
}
}
topo.emplace_back(u);
};
toposort(s);
reverse(topo.begin(), topo.end());
for (int i : topo) {
best[i] = min(best[i], du[i]);
for (auto [j, w] : adj[i]) {
if (ds[i] + w == min_dist - dt[j]) {
best[j] = min(best[j], best[i]);
}
}
}
};
vector<int64_t> dSU(N), dSV(N), dTU(N), dTV(N);
calc(dS, dT, dU, dSU, S);
calc(dS, dT, dV, dSV, S);
calc(dT, dS, dU, dTU, T);
calc(dT, dS, dV, dTV, T);
int64_t res = 2e18;
for (int i = 0; i < N; i++) {
res = min(res, min(dSU[i] + dTV[i], dSV[i] + dTU[i]));
}
cout << min(res, dU[V]);
}
| # | 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... |