제출 #315593

#제출 시각아이디문제언어결과실행 시간메모리
315593nafis_shifatToll (BOI17_toll)C++14
100 / 100
499 ms21940 KiB
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> using namespace std; const int mxn=5e4+5; const ll inf=1e15; vector<int> adj[mxn]; vector<int> tps[mxn]; int l[5 * mxn],r[5 * mxn],w[5 * mxn]; int k,m,n; ll d[mxn][6][6]; ll res[mxn]; struct query { int a,b; int ind; query(int x,int y,int z) : a(x),b(y),ind(z) {}; }; void solve(int b, int e, vector<query> q) { if(q.size() == 0) return; if(b == e) { for(auto i : q) res[i.ind] = -1; return; } int mid = b + e >> 1; for(int i = 0; i < k; i++) { for(int j = 0; j < k; j++) { d[mid][i][j] = i == j ? 0 : inf; } } for(int i = mid - 1; i >= b; i--) { for(int j = 0; j < k; j++) { for(int x = 0; x < k; x++) d[i][j][x] = inf; int u = i * k + j; for(int z : adj[u]) { int v = r[z]; for(int x = 0; x < k; x++) { d[i][j][x] = min(d[i][j][x], d[i+1][v%k][x] + w[z]); } } } } for(int i = mid + 1; i <= e; i++) { for(int j = 0; j < k; j++) { for(int x = 0; x < k; x++) d[i][j][x] = inf; int u = i * k + j; for(int z : tps[u]) { int v = l[z]; for(int x = 0; x < k; x++) { d[i][j][x] = min(d[i][j][x], d[i-1][v%k][x] + w[z]); } } } } vector<query> tm[2]; for(auto i : q) { int x = i.a / k; int y = i.b / k; if(x<=mid && y >= mid) { ll ans = inf; for(int j = 0; j < k; j++) { ans = min(ans,d[x][i.a % k][j]+d[y][i.b % k][j]); } res[i.ind] = ans >= inf ? -1 : ans; continue; } tm[x > mid].push_back(i); } solve(b,mid,tm[0]); solve(mid+1,e,tm[1]); } int main() { int o; cin>>k>>n>>m>>o; for(int i = 1; i <= m; i++) { cin>>l[i]>>r[i]>>w[i]; adj[l[i]].push_back(i); tps[r[i]].push_back(i); } vector<query> qs; for(int i = 1; i <= o; i++) { int a,b; cin>>a>>b; qs.push_back(query(a,b,i)); } solve(0,(n + k - 1) / k,qs); for(int i = 1; i <= o; i++) { cout<<res[i]<<endl; } }

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

toll.cpp: In function 'void solve(int, int, std::vector<query>)':
toll.cpp:25:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   25 |  int mid = b + e >> 1;
      |            ~~^~~
#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...