题目描述
解题思路
核心代码: f[i][j] = min(f[i][j],max(f[i][k],f[k][j]));
参考代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define inf 0x3f3f3f3f
#define MAX_V 310
using namespace std;
int f[MAX_V][MAX_V];
int main()
{
int N,M,T,u,v,h;
scanf("%d %d %d",&N,&M,&T);
memset(f,inf,sizeof(f));
for(int i = 1;i <= M;i++){
scanf("%d %d %d",&u,&v,&h);
f[u][v] = h;
}
for(int k = 1;k <= N;k++)
for(int i = 1;i <= N;i++)
for(int j = 1;j <= N;j++)
f[i][j] = min(f[i][j],max(f[i][k],f[k][j]));
for (int i = 0;i < T;i++){
scanf("%d %d",&u,&v);
if (f[u][v] == inf) printf("-1\n");
else printf("%d\n",f[u][v]);
}
return 0;
}