zoukankan      html  css  js  c++  java
  • UVA 10048 Audiophobia 【floyd】

    题目链接:

    https://vjudge.net/problem/UVA-10048

    中文大意:

    现在有一个无向图,有C个点,S个边,Q个询问。

    每条边有一个权值代表噪音值。若想从u走到v。选择一条最大噪音尽可能小的路线。

    对于每一个询问,输出u到v的路径中,输出路线的最大噪音值是多少。

    大致思路:

    整体的思路还是floyd,只不过中间的转移方程需要变一下。

    原始的floyd是求最短路,更新的时候是当有更短的路径存在。

    而在本题中,有更新的条件是发现某个路径上噪音最大值小于当前存储的值时,更新此点的值。

    (在这里lrj的小白里说反了)

    所以就可以轻松写出相应的代码

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1010;
    const int INF=0x3f3f3f3f;
    int g[maxn][maxn];
    int main()
    {
        ios::sync_with_stdio(false);
        //freopen("in.txt","r",stdin);
        int c,s,q,u,v,l,cnt=1;
        while(cin>>c>>s>>q&&(c||s||q))
        {
            if(cnt!=1)
                cout<<endl;
            memset(g,INF,sizeof(g));
            for(int i=0;i<s;++i){
                cin>>u>>v>>l;
                g[u][v]=l;
                g[v][u]=l;
            }
            for(int k=1;k<=c;++k)
                for(int i=1;i<=c;++i){
                    //g[i][i]=0;
                    for(int j=1;j<=c;++j){
                        if(i==j)
                            continue;
                        if(g[i][k]!=INF&&g[k][i]!=INF)
                            g[i][j]=min(g[i][j],max(g[i][k],g[k][j]));
                    }
                }
            cout<<"Case #"<<cnt++<<endl;
            for(int i=0;i<q;++i){
                cin>>u>>v;
                if(g[u][v]==INF)
                    cout<<"no path"<<endl;
                else
                    cout<<g[u][v]<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    UIButton和UIImageView的区别
    大道至简第八章读后感
    简单登录界面
    大道至简第七章读后感
    计算成绩代码
    大道至简第六章读后感
    产生随机数代码
    大道至简第五章读后感
    计算成绩算法
    加密算法
  • 原文地址:https://www.cnblogs.com/SCaryon/p/7613103.html
Copyright © 2011-2022 走看看