【最短路】UVa10048 噪音 (floyd求min/max问题)

本文探讨了一个从A点到B点的路径问题,目标是在所有路径中找到一条,其上所有噪音中最大的值是最小的。通过Floyd算法的修改,实现了这一复杂路径查找任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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

思路

首先询问次数较多,考虑多源。这个路径结点最大值最小问题,其实类似于最短路,floyd改一下即可。

代码

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#define _for(i,a,b) for(int i = (a); i<(b); i++)
#define _rep(i,a,b) for(int i = (a); i<=(b); i++)
using namespace std;

const int INF = 1000000000;
const int maxn = 100+10;
int n, m, q, d[maxn][maxn];

int main(){
    int kase = 0;
    while(scanf("%d%d%d",&n,&m,&q) == 3 && n){
        int u,v,w;
        _rep(i,1,n) _rep(j,1,n) if (i != j) d[i][j] = INF;
        _for(i,0,m){
            scanf("%d%d%d",&u,&v,&w);
            d[u][v] = w;
            d[v][u] = w;
        }
        _rep(k,1,n)
            _rep(i,1,n)
                _rep(j,1,n)
                    d[i][j] = min(d[i][j], max(d[i][k], d[k][j]));

        if (kase) printf("\n");
        printf("Case #%d\n",++kase);
        _for(i,0,q){
            scanf("%d%d",&u,&v);
            if (d[u][v] == INF) printf("no path\n");
            else printf("%d\n",d[u][v]);
        }
        //printf("\n");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值