前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Audiophobia UVA - 10048 】【Floyd算法】

【Audiophobia UVA - 10048 】【Floyd算法】

作者头像
_DIY
发布2019-09-11 17:31:31
4210
发布2019-09-11 17:31:31
举报
文章被收录于专栏:用户6093955的专栏

题目大意:从a城市到b城市的路径中,尽可能让一路上的最大噪音最小。

题目思路:设d [ i ][ j ]表示 i 到 j 的最大噪音的最小值。 那么d [ i ][ j ] = min( d[ i ][ j ] ,max( d [ i ][ k ] , d [ k ][ j ]) ); AC代码

代码语言:javascript
复制
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cstdlib>
#include<vector>
#include<set>
#include<utility>
#include<map>
#include<string>
using namespace std;
const int maxn = 100 + 100;
const int INF = 0x3f3f3f3f;
int C, S, Q;
int c1, c2, d;
int dist[maxn][maxn];
void Floyd()
{
    for(int k = 1; k <= C; k++)
    {
        for(int i = 1; i <= C; i++)
            for(int j = 1; j <= C; j++)
                dist[i][j] = min(dist[i][j], max(dist[i][k], dist[k][j]));
    }
}
int main()
{
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
    int cnt = 0;
    while(cin >> C >> S >> Q && C && S && Q)
    {
        ++cnt;
        for(int i = 1; i <= C; i++)
            for(int j = 1; j <= C; j++)
                dist[i][j] = INF;
        for(int i = 0; i < S; i++)
        {
            cin >> c1 >> c2 >> d;
            dist[c1][c2] = dist[c2][c1] = d;
        }
        Floyd();
        if(cnt > 1)
            cout << endl;
        cout << "Case #" << cnt << endl;
        for(int i = 0; i < Q; i++)
        {
            cin >> c1 >> c2;
            if(dist[c1][c2] == INF)
                cout << "no path" << endl;
            else 
                cout << dist[c1][c2] << endl;
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档