当前位置: 代码迷 >> 综合 >> UVa - 10048 - Audiophobia ( Floyd 变形 )
  详细解决方案

UVa - 10048 - Audiophobia ( Floyd 变形 )

热度:77   发布时间:2023-10-09 17:03:26.0

UVa - 10048 - Audiophobia ( Floyd 变形 )

UVa - 10048 - Audiophobia ( Floyd 变形 )


题目大意:从a城市到b城市的路径中,尽可能让一路上的最大噪音最小。

题目思路:设d [ i ][ j ]表示 i 到 j 的最大噪音的最小值。 那么d [ i ][ j ] = min( d[ i ][ j ]  ,max( d [ i ][ k ] , d [ k ][ j ]) );




#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 105
#define INF 100000000
using namespace std;int d[N][N];
int c,s,q,cnt=0;
int a,b,x;
void init(){for(int i=1 ;i<=c ;i++){for(int j=1 ;j<=c ;j++){d[i][j] = INF;}}for(int i=1 ;i<=s ;i++){scanf("%d%d%d",&a,&b,&x);d[a][b] = d[b][a] = x;}
}void Floyd(){for(int k=1 ;k<=c ;k++){for(int i=1 ;i<=c ;i++){for(int j=1 ;j<=c ;j++){d[i][j] = min(d[i][j],max(d[i][k],d[k][j]));}}}
}int main(){while(scanf("%d%d%d",&c,&s,&q)!=EOF){if(!c&&!s&&!q)break;cnt++;init();Floyd();if(cnt>1)printf("\n");printf("Case #%d\n",cnt);for(int i=0 ;i<q ;i++){scanf("%d%d",&a,&b);if(d[a][b]==INF){printf("no path\n");}else{printf("%d\n",d[a][b]);		}}}return 0;
}