# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
716001 | sandry24 | Toll (BOI17_toll) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
cin >> k >> n >> m >> o;
memset(dp, 0x3f, sizeof dp);
while (m--) {
int a, b, t;
cin >> a >> b >> t;
dp[a / k][0][a % k][b % k] = t;
}
for (int j = 1; j < 17; j++) {
for (int i = 0; i + (1 << j) < (n + k - 1) / k; i++) {
combine(dp[i][j], dp[i][j - 1], dp[i + (1 << j - 1)][j - 1]);
}
}
while (o--) {
int a, b;
cin >> a >> b;
memset(ans, 0x3f, sizeof ans);
for (int i = 0; i < 5; i++) ans[i][i] = 0;
for (int curr = a / k, dest = b / k, i = 16; ~i; i--) {
if (curr + (1 << i) <= dest) {
memset(tmp, 0x3f, sizeof tmp);
combine(tmp, ans, dp[curr][i]);
memcpy(ans, tmp, sizeof ans);
curr += (1 << i);
}
}
cout << (ans[a % k][b % k] == 0x3f3f3f3f ? -1 : ans[a % k][b % k])
<< '\n';
}