Submission #1237049

#TimeUsernameProblemLanguageResultExecution timeMemory
1237049ssitaramToll (BOI17_toll)C++20
0 / 100
124 ms46228 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int k, n, m, o; cin >> k >> n >> m >> o; vector<vector<vector<int>>> dist(n, vector<vector<int>>(16, vector<int>(k, 1e9))); for (int i = 0; i < m; ++i) { int a, b, t; cin >> a >> b >> t; dist[a][0][b % k] = t; } for (int i = 1; i < 16; ++i) { for (int a = 0; a < n; ++a) { for (int b = 0; b < k; ++b) { for (int c = 0; c < k; ++c) { if ((a / k + (1 << (i - 1))) * k + b < n) dist[a][i][c] = min(dist[a][i][c], dist[a][i - 1][b] + dist[(a / k + (1 << (i - 1))) * k + b][i - 1][c]); } } } } while (o--) { int a, b; cin >> a >> b; int d = b / k - a / k; vector<int> places(k, 1e9); places[a % k] = 0; int st = a / k * k; for (int i = 0; i < 16; ++i) { if (d & (1 << i)) { vector<int> nplaces(k, 1e9); for (int fr = 0; fr < k; ++fr) { for (int j = 0; j < k; ++j) { nplaces[j] = min(nplaces[j], places[st + fr] + dist[st + fr][i][j]); } } st += (1 << i) * k; places = nplaces; } } cout << (places[b % k] == 1e9 ? -1 : places[b % k]) << '\n'; } return 0; }
#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...