OJ题号:洛谷2888
思路:修改Floyd,把边权和改为边权最大值。另外注意是有向图。
1 #include2 #include 3 using namespace std; 4 #define inf 0x7fffffff 5 int main() { 6 int n,m,t; 7 scanf("%d%d%d",&n,&m,&t); 8 int d[n+1][n+1]; 9 for(int i=1;i<=n;i++) {10 for(int j=1;j<=n;j++) {11 d[i][j]=(i==j)?0:inf;12 }13 }14 while(m--) {15 int s,e,h;16 scanf("%d%d%d",&s,&e,&h);17 d[s][e]=h;18 }19 for(int k=1;k<=n;k++) {20 for(int i=1;i<=n;i++) {21 for(int j=1;j<=n;j++) {22 d[i][j]=min(d[i][j],max(d[i][k],d[k][j]));23 }24 }25 }26 while(t--) {27 int a,b;28 scanf("%d%d",&a,&b);29 printf("%d\n",(d[a][b]!=inf)?d[a][b]:-1);30 }31 return 0;32 }