Submission #676493

#TimeUsernameProblemLanguageResultExecution timeMemory
676493penguin133Toll (BOI17_toll)C++17
100 / 100
311 ms32588 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pi pair<int, int> #define pii pair<int, pair<int, int> > #define fi first #define se second int n,m,q,k; struct bru{ int d[5][5]; }; vector<pi>v[200005]; struct node{ int s,e,m; bru val; node *l, *r; node(int _s, int _e){ s = _s, e = _e, m = (s + e)/2; if(s != e){ l = new node(s, m); r = new node(m+1, e); for(int i=0;i<k;i++){ for(int j=0;j<k;j++){ val.d[i][j] = 1e18; for(int x=0;x<k;x++){ int mid = m*k + x; for(auto [a, b] : v[mid]){ int tmp = a%k; val.d[i][j] = min(val.d[i][j], l->val.d[i][x] + r->val.d[tmp][j] + b); } } } } } else{ for(int i=0;i<5;i++)for(int j=0;j<5;j++)val.d[i][j] = 1e18; for(int i=0;i<k;i++)val.d[i][i] = 0; } } bru query(int S, int E){ if(s == S && e == E)return val; else if(E <= m)return l->query(S, E); else if(S > m)return r->query(S, E); else{ bru left = l->query(S, m); bru right = r->query(m+1, E); bru ans; for(int i=0;i<k;i++){ for(int j=0;j<k;j++){ ans.d[i][j] = 1e18; for(int x=0;x<k;x++){ int mid = m*k + x; for(auto [a, b] : v[mid]){ int tmp = a%k; ans.d[i][j] = min(ans.d[i][j], left.d[i][x] + right.d[tmp][j] + b); } } } } return ans; } } }*root; void solve(){ cin >> k >> n >> m >> q; while(m--){ int a,b,c;cin >> a >> b >> c; v[a].push_back({b, c}); } root = new node(0, (n + k - 1)/k); while(q--){ int l, r;cin >> l >> r; bru ans = root->query(l/k, r/k); cout << (ans.d[l%k][r%k] == 1e18 ? -1 : ans.d[l%k][r%k]) << '\n'; } } main(){ ios::sync_with_stdio(0);cin.tie(0); int t = 1; //cin >> t; while(t--){ solve(); } }

Compilation message (stderr)

toll.cpp:79:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   79 | main(){
      | ^~~~
#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...