제출 #714642

#제출 시각아이디문제언어결과실행 시간메모리
714642parsadox2Toll (BOI17_toll)C++14
100 / 100
197 ms27852 KiB
#include <bits/stdc++.h> #define pb push_back #define F first #define S second #define debug(x) cout << #x << "= " << x << ", " #define ll long long #define fast ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) #define SZ(x) (int) x.size() #define wall cout << endl; using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int maxn = 5e4 + 10 , maxl = 17 , maxk = 7 , inf = 1e9; int n, m , q , k , dis[maxn][maxl][maxk]; vector <pair<int , int>> adj[maxn]; int find_nex(int v , int jmp , int ps) { int now = v / k; int to = now + (1 << jmp); to *= k; to += ps; return min(to , n); } int Find_ans(int nb , int np , int fb , int fp) { int res[2][maxk]; for(int i = 0 ; i < k ; i++) res[0][i] = res[1][i] = inf; res[0][np] = 0; int l = nb * k , fbi = (fb - nb) , upd = 0 , val = fb - nb; for(int jmp = 0 ; jmp < maxl ; jmp++) if((val >> jmp) & 1) { for(int i = 0 ; i < k ; i++) res[upd ^ 1][i] = inf; for(int from = 0 ; from < k ; from++) { int v = l + from; for(int to = 0 ; to < k ; to++) { res[upd ^ 1][to] = min(res[upd ^ 1][to] , res[upd][from] + dis[v][jmp][to]); } } nb += (1 << jmp); l = nb * k; upd ^= 1; } return (res[upd][fp] == inf ? -1 : res[upd][fp]); } int32_t main() { fast; cin >> k >> n >> m >> q; for(int i = 0 ; i < maxn ; i++) for(int j = 0 ; j < maxl ; j++) for(int k = 0 ; k < maxk ; k++) dis[i][j][k] = inf; for(int i = 0 ; i < m ; i++) { int v , u , c; cin >> v >> u >> c; adj[v].pb({u , c}); dis[v][0][(u % k)] = c; } for(int jmp = 1 ; jmp < maxl ; jmp++) for(int v = 0 ; v < n ; v++) for(int from = 0 ; from < k ; from++) for(int to = 0 ; to < k ; to++) dis[v][jmp][to] = min(dis[v][jmp][to] , dis[v][jmp - 1][from] + dis[find_nex(v , jmp - 1 , from)][jmp - 1][to]); while(q--) { int v , u; cin >> v >> u; if(v / k >= u / k) { cout << -1 << '\n'; continue; } cout << Find_ans(v / k , v % k , u / k , u % k) << '\n'; } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

toll.cpp: In function 'int Find_ans(int, int, int, int)':
toll.cpp:31:19: warning: unused variable 'fbi' [-Wunused-variable]
   31 |  int l = nb * k , fbi = (fb - nb) , upd = 0 , val = fb - nb;
      |                   ^~~
#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...