#include<cstdio>
#include<algorithm>
#define INF 1e9
using namespace std;
const int maxn = 300+10;
int n,m,t;
int d[maxn][maxn];
void floyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(d[i][k]<INF &&d[k][j]<INF)
d[i][j]=min(d[i][j],max(d[i][k],d[k][j])); // 当不同类d[i][k]和d[k][j]合并的时候,取得是max(最大值,因为我们要求i到j这段路内的最大值)。然后当同类路径值(即两个d[i][j]可行值)选优时,取得是最小值(因为我们要求所有i到j路径目的值中的最小值)。
}
int main()
{
while(scanf("%d%d%d",&n,&m,&t)==3)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j]= i==j?0:INF;
for(int i=1;i<=m;i++)
{
int u,v,height;
scanf("%d%d%d",&u,&v,&height);
d[u][v]=height;
}
floyd();
while(t--)
{
int u,v;
scanf("%d%d",&u,&v);
printf("%d\n",d[u][v]==INF?-1:d[u][v]);
}
}
return 0;
}
poj3615 给你一个有向图,然后对于特定的点A与B,要你求出A到B之间所有可行路径的单段路距离最大值的最小值.
猜你喜欢
转载自blog.csdn.net/qq_40859951/article/details/83926380
今日推荐
周排行