Submission #1125950

#TimeUsernameProblemLanguageResultExecution timeMemory
1125950Kel_MahmutEscape Route (JOI21_escape_route)C++20
0 / 100
9092 ms111940 KiB
#include "escape_route.h" #include <bits/stdc++.h> #define pb push_back #define endl ("\n") #define all(aa) aa.begin(), aa.end() typedef long long ll; using namespace std; vector<long long> calculate_necessary_time( int n, int m, long long S, int q, vector<int> A, vector<int> B, vector<long long> L, vector<long long> C, vector<int> U, vector<int> V, vector<long long> T) { const ll inf = 1e18; vector<vector<array<ll, 3>>> g(n); for(int i = 0; i < m; i++){ g[A[i]].pb({B[i], L[i], C[i]}); g[B[i]].pb({A[i], L[i], C[i]}); } vector<vector<ll>> mes(n, vector<ll>(n, inf)); for(int u = 0; u < n; u++){ priority_queue<array<ll, 2>, vector<array<ll, 2>>, greater<array<ll, 2>>> pq; pq.push({0, u}); vector<int> vis(n); while(!pq.empty()){ auto [d, v] = pq.top(); pq.pop(); if(vis[v]) continue; vis[v] = 1; mes[u][v] = d; for(auto [go, len, tim] : g[v]){ if(!vis[go] && d + len <= tim){ pq.push({d + len, go}); } } } } vector<vector<int>> gidible(n); for(int u = 0; u < n; u++){ for(int v = 0; v < n; v++){ if(mes[u][v] != inf) gidible[u].pb(v); } } vector<ll> ans(q, inf); for(int qq = 0; qq < q; qq++){ int uu = U[qq], vv = V[qq], tt = T[qq]; set<int> s; priority_queue<array<ll, 2>, vector<array<ll, 2>>, greater<array<ll, 2>>> pq; pq.push({tt, uu}); vector<int> vis(n); while(!pq.empty()){ auto [d, v] = pq.top(); pq.pop(); if(vis[v]) continue; vis[v] = 1; if(v == vv){ ans[qq] = d - tt; } s.insert(v); for(auto [go, len, tim] : g[v]){ if(!vis[go] && d + len <= tim){ pq.push({d + len, go}); } } } ll days = 1; while(ans[qq] == inf){ vector<int> add; for(int u : s){ if(mes[u][vv] != inf){ ans[qq] = min(ans[qq], mes[u][vv] + days * S - tt); } for(int go : gidible[u]){ if(!vis[go]){ vis[go] = 1; add.pb(go); } } } s.clear(); for(int u : add) s.insert(u); add.clear(); days++; } } return ans; } // int main(){ // int n, m, q; // ll s; // cin >> n >> m >> s >> q; // vector<int> a(m), b(m); // vector<ll> l(m), c(m); // for(int i = 0; i < m; i++){ // cin >> a[i] >> b[i] >> l[i] >> c[i]; // } // vector<int> u(q), v(q); // vector<ll> t(q); // for(int i = 0; i < q; i++){ // cin >> u[i] >> v[i] >> t[i]; // } // auto ar = calculate_necessary_time(n, m, s, q, a, b, l, c, u, v, t); // for(auto x : ar){ // cout << x << endl; // } // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...