이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define task "code"
#define ll long long
#define pi pair<long long, int>
const int maxn = 1e5 + 1;
int n, m, S, T, U, V, u, v, w;
vector<pi> adj[maxn];
long long d[4][maxn], miU[maxn], miV[maxn], res;
priority_queue< pi, vector<pi>, greater<pi> > pq;
bool vs[maxn];
void dijktra (int p, int pr) {
d[p][pr] = 0;
pq.push({0, pr});
while (!pq.empty()) {
long long tmp = pq.top().first;
u = pq.top().second;
pq.pop();
if (tmp > d[p][u]) continue;
for (pi x : adj[u]) {
tie(w, v) = x;
if (d[p][v] > d[p][u] + w)
d[p][v] = d[p][u] + w,
pq.push({d[p][v], v});
}
}
}
void dfs (int u) {
vs[u] = 1;
res = min(res, miU[u] + miV[u]);
for (auto x : adj[u]) {
tie(w, v) = x;
if (d[0][u] + w + d[1][v] == d[0][T] && vs[v] == 0) {
miU[v] = min(miU[u], d[2][v]);
miV[v] = min(miV[u], d[3][v]);
dfs(v);
}
}
miU[u] = miV[u] = 1e18;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m >> S >> T >> U >> V;
for (int i = 1; i <= m; ++ i) {
cin >> u >> v >> w;
adj[u].push_back({w, v});
adj[v].push_back({w, u});
}
for (int i = 1; i <= n; ++ i)
for (int j = 0; j < 4; ++ j)
d[j][i] = 1e17;
dijktra(0, S);
dijktra(1, T);
dijktra(2, U);
dijktra(3, V);
res = d[2][V];
memset(miU, 0x3f, sizeof miU);
memset(miV, 0x3f, sizeof miV);
miU[S] = d[2][S];
miV[S] = d[3][S];
dfs(S);
cout << res;
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... |