就是非常简单的循环,基于动态规划;
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int N = 1010;
int n, m, l, r, Q;
int dist[N][N];
void f()
{
for (int k = 1; k <= n; k ++ )
{
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= n; j ++ )
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
}
}
int main()
{
scanf("%d%d%d", &n, &m, &Q);
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= n; j ++ )
if (i == j) dist[i][j] = 0;
else dist[i][j] = INF;
while (m -- )
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
dist[a][b] = min(dist[a][b], c);
}
f();
while (Q -- )
{
int a, b;
scanf("%d%d", &a, &b);
if (dist[a][b] < INF / 2) puts("impossible");
else printf("%d", dist[a][b]);
}
return 0;
}