UVA 10048 Audiophobia(Floyd)

题意:从a点到b点, 找到一条路径,使得这条路径上的所有噪音中最大的值是所有路径中最小的, 这个噪音值便是要求的。

分析:直接用Flody求解,把其中的“之和”与“取最小值”换成“求最大值”和“最小值”

代码:

#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <sstream>
#define ll long long
#define mod 1000000007
#define mem(a) memset(a,0,sizeof(a))

using namespace std;

const int maxn = 100 + 5 , inf = 0x3f3f3f3f ;
int G[maxn][maxn];
main(){
//    freopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);
    int n,m,cmd,a,b,c,k = 1;
    while(!~scanf("%d %d %d",&n,&m,&cmd),(n||m||cmd)){
        memset(G,inf,sizeof(G));
        for(int i = 0 ; i < m ; i ++ ){
            scanf("%d %d %d",&a,&b,&c);
            G[a][b] = G[b][a] = c;
        }
        for(int k = 1 ; k <= n ; k ++ )
            for(int i = 1 ; i <= n ; i ++ )
                for(int j = 1 ; j <= n ; j ++ )
                    G[i][j] = min(G[i][j],max(G[i][k],G[k][j]));
        if(k>1) printf("\n");
        printf("Case #%d\n",k++);
        for(int i = 1 ; i <= cmd ; i ++ ){
            scanf("%d %d",&a,&b);
            G[a][b] == inf ? printf("no path\n") : printf("%d\n",G[a][b]);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/insist_77/article/details/80657860