/*
其实这道题跟最短路没什么关系了,因为求的是青蛙从s到e每一条路中的最大跳跃距离。
并且在所有路中的最大跳跃距离找到最短的,在这道题中又对floyd加深了了解。
也有dp的感觉。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 0x3f3f3f3f
int gragh[500][500];
int n,m,t;
using namespace std;
void floyd()
{
for(int k = 1;k <= n; k++)
for(int i = 1;i <= n; i++)
for(int j = 1;j <= n; j++)
gragh[i][j] = min(gragh[i][j],max(gragh[i][k],gragh[k][j]));//关键在于松弛
}
int main()
{
// freopen("in.txt","r",stdin);
while(scanf("%d%d%d",&n,&m,&t) != EOF) {
memset(gragh,inf,sizeof(gragh));
int s,e,q;
for(int i = 1;i <= m; i++){
scanf("%d%d%d",&s,&e,&q);
gragh[s][e] = q;
}
floyd();
for(int i = 1;i <= t; i++) {
scanf("%d%d",&s,&e);
if(gragh[s][e] == inf)
printf("-1\n");
else
printf("%d\n",gragh[s][e]);
}
}
return 0;
}
POJ 3615 (变形的floyd,最大的最小)
最新推荐文章于 2020-03-08 17:07:38 发布