제출 #493308

#제출 시각아이디문제언어결과실행 시간메모리
493308izhang05Toll (BOI17_toll)C++17
100 / 100
151 ms83136 KiB
#include <bits/stdc++.h> using namespace std; //#define DEBUG void setIO(const string &name) { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin.exceptions(istream::failbit); #ifdef LOCAL freopen(("in" + name + ".txt").c_str(), "r", stdin); freopen("out.txt", "w", stdout); freopen("out.txt", "w", stderr); #endif } const int inf = 0x3f3f3f3f, mod = 1e9 + 7, maxn = 5e4 + 5, maxs = 16, maxk = 5; const long long INFL = 0x3f3f3f3f3f3f3f3f; vector<pair<int, int>> adj[maxn]; int up[maxn][maxk][maxk][maxs], depth[maxn], n, k; void build() { for (int i = 1; i < maxs; ++i) { for (int j = 0; j < n / k; ++j) { if (j + (1 << i) >= (n + k - 1) / k) { continue; } for (int a = 0; a < k; ++a) { for (int c = 0; c < k; ++c) { for (int b = 0; b < k; ++b) { up[j][a][c][i] = min(up[j][a][c][i], up[j][a][b][i - 1] + up[j + (1 << (i - 1))][b][c][i - 1]); } } } } } } void solve() { int m, q; cin >> k >> n >> m >> q; memset(up, 0x3f, sizeof(up)); for (int i = 0; i < m; ++i) { int a, b, c; cin >> a >> b >> c; up[a / k][a % k][b % k][0] = c; } build(); for (int i = 0; i < q; ++i) { int a, b; cin >> a >> b; int jumps = (b / k) - (a / k); if (jumps == 0) { cout << -1 << "\n"; continue; } vector<vector<int>> cur(k, vector<int>(k, inf)); for (int j = 0; j < k; ++j) { cur[j][j] = 0; } int cur_group = a / k; for (int j = 0; j < maxs; ++j) { if (jumps & (1 << j)) { vector<vector<int>> new_cur(k, vector<int>(k, inf)); for (int c = 0; c < k; ++c) { for (int e = 0; e < k; ++e) { for (int d = 0; d < k; ++d) { new_cur[c][e] = min(new_cur[c][e], cur[c][d] + up[cur_group][d][e][j]); } } } cur_group += 1 << j; swap(cur, new_cur); } } cout << (cur[a % k][b % k] == inf ? -1 : cur[a % k][b % k]) << "\n"; } } int main() { setIO("1"); int test_case_number = 1; while (test_case_number--) { solve(); } 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...