#include <bits/stdc++.h>
#define int long long
using namespace std;
int k, a, b, c;
int z[100005][5][5];
int bruh = 1e16;
vector<vector<int>> f[400005];
vector<vector<int>> combine(vector<vector<int>> left, vector<vector<int>> right, int mid) {
vector<vector<int>> res(k, vector<int>(k, bruh));
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++) {
for (int l = 0; l < k; l++) {
res[i][j]=min(res[i][j],left[i][l]+right[l][j]);
}
}
}
return res;
}
void build(int id, int l, int r) {
f[id].resize(k, vector<int>(k, bruh));
if (l == r) {
for (int i = 0; i < k; i++) {
for (int j=0;j<k;j++){
f[id][i][j]=z[l][i][j];
}
}
return;
}
int mid = (l + r) / 2;
build(id * 2, l, mid);
build(id * 2 + 1, mid + 1, r);
f[id] = combine(f[id * 2], f[id * 2 + 1], mid);
}
vector<vector<int>> full(k, vector<int>(k, bruh));
vector<vector<int>> get(int id, int l, int r, int x, int y) {
if (x > r || y < l) {
return full;
}
if (x <= l && r <= y) {
return f[id];
}
int mid = (l + r) / 2;
vector<vector<int>> pre1 = get(id * 2, l, mid, x, y);
vector<vector<int>> pre2 = get(id * 2 + 1, mid + 1, r, x, y);
if (pre1 == full) return pre2;
if (pre2 == full) return pre1;
return combine(pre1, pre2, mid);
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> k >> a >> b >> c;
for (int i = 0; i < 10005; i++) {
for (int j = 0; j < k; j++) {
for (int t = 0; t < k; t++) {
z[i][j][t] = bruh;
}
}
}
for (int i = 1; i <= b; i++) {
int x, y, t;
cin >> x >> y >> t;
z[x / k][x % k][y % k] = t;
}
int n = a / k ;
build(1, 0, n);
for (int i = 1; i <= c; i++) {
int x, y;
cin >> x >> y;
int sta = x / k;
int fin = y / k;
if (sta == fin) {
cout << -1 << "\n";
continue;
}
vector<vector<int>> r = get(1, 0, n , sta, fin-1);
if (r==full || r[x % k][y % k] >= bruh) {
cout << -1 << "\n";
} else {
cout << r[x % k][y % k] << "\n";
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |