Submission #1304856

#TimeUsernameProblemLanguageResultExecution timeMemory
1304856tranbahien0Commuter Pass (JOI18_commuter_pass)C++20
31 / 100
195 ms53716 KiB
#include <bits/stdc++.h> #define FOR(i, a, b) for(int i = (a); i <= (b); i++) #define FOD(i, a, b) for(int i = (a); i >= (b); i--) #define file(name) if(fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); } #define fi first #define se second #define el cout << '\n' #define maxn int(1e6 + 5) using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, int> pli; struct Edge { int u, v, w; } e[maxn]; int n, m; int A, B, C, D; ll d[5][maxn]; vector<pii> adj[maxn]; void dijkstra(int s, ll d[]) { priority_queue<pli, vector<pli>, greater<pli>> q; d[s] = 0; q.push({ 0, s }); while(!q.empty()) { int u = q.top().se; ll du = q.top().fi; q.pop(); if(du != d[u]) continue; for(pii x : adj[u]) { int v = x.fi, w = x.se; if(d[v] > d[u] + w) { d[v] = d[u] + w; q.push({ d[v], v }); } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; cin >> A >> B >> C >> D; FOR(i, 1, m) { int u, v, w; cin >> u >> v >> w; e[i] = {u, v, w}; adj[u].push_back({ v, w }); adj[v].push_back({ u, w }); } memset(d, 0x3f, sizeof d); dijkstra(A, d[0]); dijkstra(B, d[1]); FOR(i, 1, n) adj[i].clear(); FOR(i, 1, m) { int u = e[i].u, v = e[i].v, w = e[i].w; if(d[0][u] + d[1][v] + w == d[0][B] || d[0][v] + d[1][u] + w == d[0][B]) { adj[u].push_back({ v, 0 }); adj[v].push_back({ u, 0 }); } else { adj[u].push_back({ v, w }); adj[v].push_back({ u, w }); } } dijkstra(C, d[2]); cout << d[2][D]; 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...