Submission #1157707

#TimeUsernameProblemLanguageResultExecution timeMemory
1157707shnEscape Route (JOI21_escape_route)C++20
5 / 100
9091 ms111940 KiB
#include "escape_route.h" #include <bits/stdc++.h> using namespace std; #define pb push_back const int N = 91; struct node{ long long w , lim; int to; }; vector < node > g[N]; 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> v,vector<int> u, vector<long long> t){ vector < long long > ans; for(int i = 0; i < m; i++){ g[a[i]].pb({l[i] , c[i] , b[i]}); g[b[i]].pb({l[i] , c[i] , a[i]}); } for(int i = 0; i < q; i++){ set < pair < pair < long long , long long > , int > > st; st.insert({{0 , t[i]} , v[i]}); pair < long long , long long > dst[n]; for(int i = 0; i < n; i++) dst[i] = {n + 5 , n + 100}; dst[v[i]] = {0 , t[i]}; while(st.size()){ int v = st.begin() -> second; st.erase(st.begin()); for(node it : g[v]){ long long d = dst[v].first , tim = dst[v].second; // cout << v << ' ' << it.to << ' ' << d << ' ' << tim << '\n'; if(0 <= tim && tim <= it.lim - it.w){ tim += it.w; } else{ tim = it.w; d++; } // d += tim / s; // tim %= s; // cout << d << ' ' << s << '\n'; if(min(dst[it.to] , {d , tim}) != dst[it.to]){ st.erase({dst[it.to] , it.to}); dst[it.to] = {d , tim}; st.insert({dst[it.to] , it.to}); } } } // for(int i = 0; i < n; i++){ // cout << dst[i].first << ' ' << dst[i].second << '\n'; // } ans.pb(dst[u[i]].first * s + dst[u[i]].second - t[i]); } // cout << "sdg"; return ans; } // int main(){ // int n , m; // long long s; // int q; // cin >> n >> m >> s >> q; // vector < int > a , b; // vector < long long > l , c; // for(int i = 0; i < m; i++){ // int x , y; // long long z , t; // cin >> x >> y >> z >> t; // a.pb(x); // b.pb(y); // l.pb(z); // c.pb(t); // } // vector < int > v , u; // vector < long long > t; // for(int i = 0; i < q; i++){ // int x , y; long long z; // cin >> x >> y >> z; // v.pb(x); // u.pb(y); // t.pb(z); // } // vector < long long > ans = calculate_necessary_time(n , m , s , q , a , b , l , c , v , u , t); // // for(auto it : ans){ // // cout << it << '\n'; // // } // }
#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...