#include<iostream>
#include<cstring>
using namespace std;
const int N = 210;
int dist[N][N];
int n,m,q;
void floyd(){
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(){
cin >> n >> m >> q;
memset(dist,0x3f,sizeof dist);
for(int i = 1; i <= n; i ++) dist[i][i] = 0;
while(m --){
int a,b,c;
cin >> a >> b >> c;
dist[a][b] = min(dist[a][b],c);
}
floyd();
while(q --){
int x,y;
cin >> x >> y;
if(dist[x][y] >= 0x3f3f3f3f/2) printf("impossible\n"); //为什么是>=03xf3f3f3f/2?因为存在负权边 所以0x3f3f3f3f这个值可能会因为负值被更新 但值依然远大于0x3f3f3f3f/2
else printf("%d\n",dist[x][y]);
}
return 0;
}
AcWing 854. Floyd求最短路 floyd
最新推荐文章于 2024-07-21 21:08:59 发布