作者:
Jesus
,
2022-04-24 00:31:57
,
所有人可见
,
阅读 5
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 210;
int INF = 1E9, n, m, q;
int dis[N][N];
int Floyd() {
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]);
}
}
int main() {
cin >> n >> m >> q;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (i == j) dis[i][j] = 0;
else dis[i][j] = INF;
while (m--) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
dis[a][b] = min(dis[a][b], c);
}
Floyd();
while (q--) {
int a, b;
scanf("%d %d", &a, &b);
if (dis[a][b] > INF / 2) cout << "impossible" << endl;
else cout << dis[a][b] << endl;
}
return 0;
}