UVA 10048 Audiophobia(Floyd)

62 篇文章 0 订阅
17 篇文章 0 订阅
题目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=989

思路:FLoyd过程中将加变为取max,取min变为取max。即对于两点i、j,将k作为中转点,取i->k,k->j最大值,作为最长边,取所有i->k->j最小值,作为i、j两点的最大边权值的最小值。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100+50;
const int INF=0x3f3f3f3f;
int n,m,q;
int g[maxn][maxn];
void Floyd()
{
    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]));
        }
    }
}
int main()
{
    int cas=0;
    while(scanf("%d%d%d",&n,&m,&q)!=EOF&&n)
    {
        cas++;
        if(cas!=1) printf("\n");
        printf("Case #%d\n",cas);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
              g[i][j]=INF;
        for(int i=0;i<m;i++)
        {
            int x,y,w;
            scanf("%d%d%d",&x,&y,&w);
            g[x][y]=w,g[y][x]=w;
        }
        Floyd();
        for(int i=0;i<q;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            if(g[x][y]>=INF) printf("no path\n");
            else printf("%d\n",g[x][y]);
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值