제출 #1157834

#제출 시각아이디문제언어결과실행 시간메모리
1157834Kaztaev_AlisherEscape Route (JOI21_escape_route)C++20
5 / 100
9094 ms134652 KiB
#include "escape_route.h" #include <bits/stdc++.h> #define ios ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout) #define all(a) a.begin() , a.end() #define F first #define S second using namespace std; using ll = long long; const ll N = 95 , M = 5005 , Q = 3e6+5 , inf = 2e9 + 7; const ll INF = 1e18 , mod = 1e9+7; ll n , m , s , q , a[M] , b[M] , l[M] , c[M] , u[Q] , v[Q] , t[Q] , dp[N] , ord[Q]; vector<ll> g[N][N]; vector<ll> slow(){ vector<ll> ans; for(ll i = 1; i <= q; i++){ u[i]++; v[i]++; for(ll j = 1; j <= n; j++){ dp[j] = INF; } dp[u[i]] = t[i]; int bas = u[i] , K = n-1; while(K--){ int nxt = 0; for(int to = 1; to <= n; to++){ if(to == bas || dp[to] < dp[bas]) continue; for(ll in : g[bas][to]){ ll tim = dp[bas]; if(tim%s + l[in] > c[in]){ tim += s-tim%s + l[in]; } else { tim += l[in]; } if(dp[to] > tim) dp[to] = tim; } if(nxt == 0 || dp[to] < dp[nxt]) nxt = to; } if(nxt == 0) break; bas = nxt; } ans.push_back(dp[v[i]]-t[i]); } return ans; } // vector<ll> gocode(){ // vector<ll> ans; // for(ll j = 1; j <= n; j++){ // dp[j] = INF; // } // for(ll i = 1; i <= q; i++){ // ord[i] = i; // ans.push_back(0); // } // sort(ord+1,ord+1+q,[&](int i , int j){ // return t[i] > t[j]; // }); // for(int _ = 1; _ <= q; _++){ // int i = ord[_]; // dp[u[i]] = t[i]; // set<pair<ll,ll>> st; // st.insert({t[i],u[i]}); // while(st.size()){ // ll ver = st.begin()->S; // st.erase(st.begin()); // for(ll in : g[ver]){ // ll to = (ver^b[in]^a[in]); // ll tim = dp[ver]; // if(tim%s + l[in] > c[in]){ // tim += s-tim%s + l[in]; // } else { // tim += l[in]; // } // if(dp[to] > tim){ // st.erase({dp[to],to}); // dp[to] = tim; // st.insert({dp[to],to}); // } // } // } // ans[i-1] = dp[v[i]]-dp[u[i]]; // } // return ans; // } vector<long long> solve(){ // int cnt = 0; for(ll i = 1; i <= m; i++){ a[i]++; b[i]++; g[a[i]][b[i]].push_back(i); g[b[i]][a[i]].push_back(i); } // for(ll i = 1; i <= q; i++){ // u[i]++; v[i]++; // if(u[i] == 1){ // cnt++; // } // } // if(cnt == q){ // return gocode(); // } else{ return slow(); // } } 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) { n = N; m = M; q = Q; s = S; for(int i = 0; i < m; i++){ a[i+1] = A[i]; b[i+1] = B[i]; c[i+1] = C[i]; l[i+1] = L[i]; } for(int i = 0; i < q; i++){ u[i+1] = U[i]; v[i+1] = V[i]; t[i+1] = T[i]; } return solve(); } // int main(){ // cin >> n >> m >> s >> q; // for(int i = 1; i <= m; i++){ // cin >> a[i] >> b[i] >> l[i] >> c[i]; // } // for(int i = 1; i <= q; i++){ // cin >> u[i] >> v[i] >> t[i]; // } // vector<ll> x = solve(); // for(ll y : x){ // cout << y <<"\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...