显示原始代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline void read(int &x, int f = 1) {
x = 0;
char c = getchar();
while (c != '-' && (c < '0' || c > '9')) c = getchar();
if (c == '-')
c = getchar(), f = -1;
while (c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
x *= f;
}
const int maxn = 5e2 + 5;
const ll INF = 1e18;
ll dis[maxn][maxn];
int n, m, d;
int main() {
read(n), read(m), read(d);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
if (i ^ j)
dis[i][j] = INF;
for (int i = 1, x, y, z; i <= m; ++i) read(x), read(y), read(z), dis[x][y] = min(dis[x][y], (ll)z);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
for (int k = 1; k <= n; ++k) dis[j][k] = min(dis[j][k], dis[j][i] + dis[i][k]);
for (int tim = 1, x, y, z, q; tim <= d; ++tim) {
read(x), read(y), read(z), read(q);
for (int j = 1; j <= n; ++j)
for (int k = 1; k <= n; ++k) dis[j][k] = min(dis[j][k], dis[j][x] + z + dis[y][k]);
for (int i = 1, x, y; i <= q; ++i) read(x), read(y), printf("%lld\n", dis[x][y]);
}
return 0;
}