代码实现:
#include<stdio.h>
#include<string.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
const int maxn=1e9;
int w[310][310],n,m,t;
void Floyd(){
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
w[i][j]=min(w[i][j],max(w[i][k],w[k][j]));
}
}
}
int main(){
while(~scanf("%d%d%d",&n,&m,&t)){
int s,e,h;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
w[i][j]=maxn;
w[i][i]=0;
}
while(m--){
scanf("%d%d%d",&s,&e,&h);
if(w[s][e]>h)
w[s][e]=h;
}
Floyd();
int a,b;
while(t--){
scanf("%d%d",&a,&b);
if(w[a][b]<maxn) printf("%d\n",w[a][b]);
else printf("-1\n");
}
}
}