Submission #1278024

#TimeUsernameProblemLanguageResultExecution timeMemory
1278024hoangtien69Commuter Pass (JOI18_commuter_pass)C++20
100 / 100
214 ms20148 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int MAXN = 2e5 + 5; #define pii pair<int, int> const int INF = 1e18; int n, m; int U, V, S, T; vector<pii> adj[MAXN]; int du[MAXN]; int dv[MAXN]; int ds[MAXN]; int dp[2][MAXN]; void dijskstra1(int st, int d[]) { for (int i = 1; i <= n; i++) { d[i] = INF; } d[st] = 0; priority_queue<pii, vector<pii>, greater<pii>> pq; pq.push({d[st], st}); while(!pq.empty()) { auto[dist, u] = pq.top(); pq.pop(); if (dist > d[u]) continue; for (auto[v, w] : adj[u]) { if (d[v] > d[u] + w) { d[v] = d[u] + w; pq.push({d[v], v}); } } } } int dijskstra2(int s, int t) { for (int i = 1; i <= n; i++) { dp[0][i] = INF; dp[1][i] = INF; ds[i] = INF; } ds[s] = 0; dp[0][s] = du[s]; dp[1][s] = dv[s]; priority_queue<pii, vector<pii>, greater<pii>> pq; pq.push({ds[s], s}); while(!pq.empty()) { auto[dist, u] = pq.top(); pq.pop(); if (dist > ds[u]) continue; for (auto[v, w] : adj[u]) { if (ds[v] > ds[u] + w) { ds[v] = ds[u] + w; dp[0][v] = min(dp[0][u], du[v]); dp[1][v] = min(dp[1][u], dv[v]); pq.push({ds[v], v}); } else if (ds[v] == ds[u] + w) { int old_sum = dp[0][v] + dp[1][v]; int new_sum = min(dp[0][u], du[v]) + min(dp[1][u], dv[v]); if (new_sum < old_sum) { dp[0][v] = min(dp[0][u], du[v]); dp[1][v] = min(dp[1][u], dv[v]); } } } } return dp[0][t] + dp[1][t]; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; cin >> S >> T; cin >> U >> V; for (int i = 1; i <= m; i++) { int u, v, c; cin >> u >> v >> c; adj[u].push_back({v, c}); adj[v].push_back({u, c}); } dijskstra1(U, du); dijskstra1(V, dv); int res = du[V]; cout << min({res, dijskstra2(S, T), dijskstra2(T, S)}); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...