poj 3615(floyd变形 水题)

题意:求两点之间的所有路径中的最高点最低的路径的最高点。例如 

1-> 2 12
3-> 2 8
1-> 3 5
则输出8。
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 
 6 using namespace std;
 7 #define MAX(x,y) ((x)>(y)?(x):(y))
 8 #define MIN(x,y) ((x)>(y)?(y):(x))
 9 #define inf 0x7fffffff
10 #define MAXN 305
11 #define MAXM 25010
12 
13 int N,M,T;
14 int dis[MAXN][MAXN];
15 
16 void floyd()
17 {
18     for(int k=1;k<=N;k++)
19         for(int i=1;i<=N;i++)
20             for(int j=1;j<=N;j++)
21                 dis[i][j]=MIN(dis[i][j],MAX(dis[i][k],dis[k][j]));
22 }
23 
24 int main()
25 {
26     int s,e,h;
27     while(scanf("%d%d%d",&N,&M,&T) != EOF)
28     {
29         for(int i=1;i<=N;i++)
30             for(int j=1;j<=N;j++)
31                 if(i==j)
32                     dis[i][j]=0;
33                 else
34                     dis[i][j]=inf;
35         while(M--)
36         {
37             scanf("%d%d%d",&s,&e,&h);
38             dis[s][e]=h;
39         }
40         floyd();
41         while(T--)
42         {
43             scanf("%d%d",&s,&e);
44             if(dis[s][e]==inf)
45                 printf("-1\n");
46             else
47                 printf("%d\n",dis[s][e]);
48         }
49     }
50     return 0;
51 }
原文地址:https://www.cnblogs.com/Missa/p/2663771.html