Submission #1253181

#TimeUsernameProblemLanguageResultExecution timeMemory
1253181tnknguyen_Commuter Pass (JOI18_commuter_pass)C++20
100 / 100
191 ms26952 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define ll long long #define len(s) (int)s.size() #define int long long #define pii pair<int, int> #define fi first #define se second #define MASK(k) (1LL << (k)) const int MX = 1e5 + 5; vector<pii> gr[MX]; vector<int> dag[MX]; int d[5][MX], vi[MX]; int f[2][MX]; void Dijkstra(int S, const int &k){ memset(d[k], 63, sizeof d[k]); d[k][S] = 0; priority_queue<pii> Q; Q.push({0, S}); while(len(Q)){ int w, u; tie(w, u) = Q.top(); Q.pop(); w = -w; if(w > d[k][u]) continue; for(pii p : gr[u]){ int v, c; tie(v, c) = p; if(w + c < d[k][v]){ d[k][v] = w + c; Q.push({-d[k][v], v}); } } } } deque<int> topo; void dfs(int p, int u){ vi[u] = 1; for(int v : dag[u]) if(!vi[v]) dfs(u, v); topo.push_front(u); } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("PATH.inp","r",stdin); //freopen("PATH.out","w",stdout); int n, m, S, T, U, V; cin >> n >> m; cin >> S >> T >> U >> V; for(int i=1; i<=m; ++i){ int u, v, c; cin >> u >> v >> c; gr[u].push_back({v, c}); gr[v].push_back({u, c}); } Dijkstra(S, 0); Dijkstra(T, 1); Dijkstra(U, 2); Dijkstra(V, 3); int ST = d[0][T], UV = d[2][V]; // DAG for(int u=1; u<=n; ++u){ for(pii p : gr[u]){ int v, c; tie(v, c) = p; if(d[0][u] + c + d[1][v] == ST) dag[u].push_back(v); } } // DP for(int i=1; i<=n; ++i){ f[0][i] = d[2][i]; // U -> i f[1][i] = d[3][i]; // V -> i } // TOPO dfs(0, S); for(int u : topo){ for(int v : dag[u]){ f[0][v] = min(f[0][v], f[0][u]); f[1][v] = min(f[1][v], f[1][u]); } } int ans = UV; for(int i=1; i<=n; ++i){ if(d[0][i] + d[1][i] == ST){ ans = min({ans, f[0][i] + d[3][i], f[1][i] + d[2][i]}); } } cout << ans; 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...