您的位置:首页 > 运维架构

UVa - 10048 - Audiophobia ( Floyd 变形 )

2016-12-19 22:12 465 查看




题目大意:从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

;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: