UVa - 10048 - Audiophobia ( Floyd 变形 )

来源:互联网 发布:加工中心圆怎么编程 编辑:程序博客网 时间:2024/06/16 22:54



题目大意:从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 100000000using 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;} 






0 0
原创粉丝点击