Submission #1253187

#TimeUsernameProblemLanguageResultExecution timeMemory
1253187MinhKienCommuter Pass (JOI18_commuter_pass)C++17
100 / 100
242 ms24120 KiB
#include <iostream> #include <vector> #include <queue> using namespace std; #define ll long long #define li pair <ll, int> #define fi first #define se second const int N = 1e5 + 10; const ll INF = 1e18; int n, m, A, B, C, D; int x, y, w; bool vis[N]; ll fromA[N], fromB[N], fromC[N], fromD[N]; vector <li> v[N]; priority_queue < li, vector <li>, greater <li> > q; void dijkstra(int S, ll dis[]) { fill_n(dis, n + 1, INF); dis[S] = 0; q.push(li(0, S)); while (!q.empty()) { int u = q.top().se; ll wei = q.top().fi; q.pop(); if (wei > dis[u]) continue; for (li z: v[u]) { if (wei + z.fi < dis[z.se]) { dis[z.se] = wei + z.fi; q.push(li(dis[z.se], z.se)); } } } } ll dp[2][N], best; void DFS(int s) { vis[s] = true; dp[0][s] = dp[1][s] = INF; for (li z: v[s]) { if (fromA[s] + fromB[z.se] + z.fi != fromA[B]) continue; if (!vis[z.se]) DFS(z.se); dp[0][s] = min(dp[0][s], dp[0][z.se]); dp[1][s] = min(dp[1][s], dp[1][z.se]); } best = min(best, min(dp[0][s] + fromD[s], dp[1][s] + fromC[s])); dp[0][s] = min(dp[0][s], fromC[s]); dp[1][s] = min(dp[1][s], fromD[s]); } int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); cin >> n >> m >> A >> B >> C >> D; while (m--) { cin >> x >> y >> w; v[x].push_back(li(w, y)); v[y].push_back(li(w, x)); } dijkstra(A, fromA); dijkstra(B, fromB); dijkstra(C, fromC); dijkstra(D, fromD); best = fromC[D]; DFS(A); cout << best << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...