三重循环
#include<iostream>
#include<algorithm>
using namespace std ;
const int N = 209 , INF = 1e9 ;
int n , m , k;
int dist[N][N] ;
void foyld()
{
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 >> k ;
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 ;
}
}
for(int i = 1 ; i <= m ; i++)
{
int x , y , z ;
cin >> x >> y >> z ;
dist[x][y] = min(dist[x][y] , z) ;
}
foyld() ;
while(k--)
{
int a,b;
cin>>a>>b;
int t=dist[a][b];
if(t>INF/2)puts("impossible");
else
cout<<dist[a][b]<<endl;
}
return 0 ;
}