Submission #1157132

#TimeUsernameProblemLanguageResultExecution timeMemory
1157132tsengangCommuter Pass (JOI18_commuter_pass)C++17
100 / 100
310 ms23716 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ff first #define ss second #define all(x) (x).begin(), (x).end() #define pb push_back #define ertunt return const int MOD = 998244353; #pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") const ll INF = 1e18; vector<pair<ll, ll>> v[100004]; ll n, m, S, T, U, V; ll dist[100004][3]; ll dp[100004][4]; void djikstra(ll d, ll i) { set<pair<ll, ll>> s; s.insert({0, d}); dist[d][i] = 0; while (!s.empty()) { auto p = *s.begin(); s.erase(s.begin()); if (dist[p.ss][i] != p.ff) continue; for (auto [x, y] : v[p.ss]) { if (p.ff + y < dist[x][i]) { s.erase({dist[x][i], x}); dist[x][i] = p.ff + y; s.insert({dist[x][i], x}); } } } } ll get(ll x, ll v) { ll res = 0; if (v & 1) res += dist[x][1]; if (v & 2) res += dist[x][2]; return res; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; cin >> S >> T >> U >> V; for (ll i = 0; i < m; i++) { ll a, b, c; cin >> a >> b >> c; v[a].pb({b, c}); v[b].pb({a, c}); } for (ll i = 0; i <= n; i++) { for (ll j = 0; j < 3; j++) dist[i][j] = INF; } djikstra(S, 0); djikstra(U, 1); djikstra(V, 2); for (ll i = 1; i <= n; i++) { for (ll j = 0; j < 4; j++) dp[i][j] = INF; } vector<pair<ll, ll>> ds(n + 1); for (ll i = 1; i <= n; i++) { ds[i] = {dist[i][0], i}; } sort(ds.begin() + 1, ds.end()); dp[S][0] = 0; dp[S][1] = dist[S][1]; dp[S][2] = dist[S][2]; dp[S][3] = dist[S][1] + dist[S][2]; for (ll z = 1; z <= n; z++) { ll i = ds[z].ss; for (auto [j, w] : v[i]) { if (dist[i][0] + w != dist[j][0]) continue; for (ll l = 0; l < 4; l++) { for (ll k = 0; k < 4; k++) { dp[j][l | k] = min(dp[j][l | k], dp[i][l] + get(j, k)); } } } } ll ans = min(dp[T][3], dist[V][1]); cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...