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;
}
时间: 2024-08-29 04:47:20

UVA 10048 Audiophobia 【floyd】的相关文章

UVa 10048 Audiophobia【Floyd】

题意:给出一个c个点,s条边组成的无向图,求一点到另一点的路径上最大权值最小的路径,输出这个值 可以将这个 d[i][j]=min(d[i][j],d[i][k]+d[k][j]) 改成 d[i][j]=min(d[i][j],max(d[i][k],d[k][j])) 即为先找出最大权值的一条边,再从这些边中找出最小的 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <

UVA - 10048 Audiophobia (Floyd应用)

题意:求出两点之间所有路径最大权值的最小值. 思路:转变一下Floyd的形式即可: 注意:注意初始化问题,还有UVA奇葩的输出形式. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<map> using namespace std; #define inf 0x3f3f3f int dp[110][110]; int mai

UVA 567 Risk【floyd】

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=508 题意:20个点的任意最短路.floyd 代码: #include <stdio.h> #include <ctime> #include <math.h> #include <string> #include <iter

uva 10048 - Audiophobia(floyd 的变形)

给出一个无向连通图以及边权,目的求从一个点到另一个点的路径中 边权最大值 最小的那条路径,输出的是该条路径的最大边权. 因为是两点间路径问题,且数据量很小(只有100个) ,所以考虑使用floyd算法. 但是要求的并不是传统 floyd 所求的 两点之间最短路 问题,但是通过理解floyd算法的原理,可以发现floyd的思想可以用来解决这种问题: 对于任何一条至少包含两条边的路径i->j,一定存在一个中间点k,使得i->j的总长度等于i->k与k->j的长度之和.因为路径可能有多个

HDU1385 Minimum Transport Cost 【Floyd】+【路径记录】

Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7496    Accepted Submission(s): 1918 Problem Description These are N cities in Spring country. Between each pair of cities

【floyd】HDU 1874 畅通工程续

之后的题解偏重实用/总结性质,尽量理解算法本身而不是题,时间复杂度什么的也可以放放. 很久之前做过这个题,当时使用dijkstra做的,关于几个最短路算法,分类的话可以分为以下几种. 1.单源最短路:已知起点(终点),计算从源点到其他各个顶点的最短路径长度. 典型算法:Dijkstra,Bellman-Ford(可以算负的,比较慢),spfa(负权能用,加了松弛操作,速度比较炸天) 2.全局最短路:从一点到另一点,典型如Floyd,A*启发式算法. 重新用floyd写一遍: #include <

Uvaoj 10048 - Audiophobia(Floyd算法变形)

1 /* 2 题目大意: 3 从一个点到达另一个点有多条路径,求这多条路经中最大噪音值的最小值! . 4 5 思路:最多有100个点,然后又是多次查询,想都不用想,Floyd算法走起! 6 */ 7 #include<iostream> 8 #include<cstring> 9 #include<cstdio> 10 #define INF 0x3f3f3f3f 11 using namespace std; 12 13 int map[105][105]; 14 1

POJ2253 Frogger 【Floyd】

讲的是,一只雄青蛙要从一个石头到另外一个石头上去找某只雌青蛙,但是这两个石头隔得太远,青蛙跳不过去,所幸,湖面上还有很多其他石头,所以青蛙可以借助别的石头一步一步地跳向那只雌青蛙所在的石头.显然青蛙可能有多种路径,比如其中一条是 2,3,4,2,1 ,它跳了五次,数字代表每次跳的距离也就是路径上相邻两个石头之间的距离,那么这只青蛙的弹跳能力至少是4才能跳过去.在其他的路径中,可能要求青蛙的弹跳是5,是8,是1,是100,等等,这个问题求青蛙需要的最小弹跳能力.其实也就是个最大值中取最小的问题.

POJ1734 Sightseeing trip 【Floyd】+【最小环】+【路径记录】

Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4830   Accepted: 1857   Special Judge Description There is a travel agency in Adelton town on Zanzibar island. It has decided to offer its clients, besides many other attra