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 main()
{
    int n,m,q,a,b,w,ca = 0;
    while(cin>>n>>m>>q)
    {
        if(n+m+q==0) break;
        if(ca != 0)printf("\n");
        memset(dp,0x3f,sizeof(dp));
        for(int i = 0; i < m; i++)
        {
            cin>>a>>b>>w;
            dp[a][b] = dp[b][a] = w;
        }
        for(int i = 1; i <= n; i++)
        {
            dp[i][i] = 0;
        }
        for(int k = 1; k <= n; k++)
        {
            for(int i = 1; i <= n; i++)
            {
                for(int j = 1; j <= n; j++)
                {
                    dp[i][j] = min(dp[i][j],max(dp[i][k],dp[k][j]));
                }
            }
        }
        cout<<"Case #"<<++ca<<endl;
        for(int i = 0; i < q; i++)
        {
            cin>>a>>b;
            if(dp[a][b] >= inf)
            {
                cout<<"no path\n";
            }
            else cout<<dp[a][b]<<endl;
        }
    }
    return 0;
}
时间: 2024-10-06 00:31:42

UVA - 10048 Audiophobia (Floyd应用)的相关文章

UVA 10048 Audiophobia 【floyd】

题目链接: https://vjudge.net/problem/UVA-10048 中文大意: 现在有一个无向图,有C个点,S个边,Q个询问. 每条边有一个权值代表噪音值.若想从u走到v.选择一条最大噪音尽可能小的路线. 对于每一个询问,输出u到v的路径中,输出路线的最大噪音值是多少. 大致思路: 整体的思路还是floyd,只不过中间的转移方程需要变一下. 原始的floyd是求最短路,更新的时候是当有更短的路径存在. 而在本题中,有更新的条件是发现某个路径上噪音最大值小于当前存储的值时,更新此

uva 10048 - Audiophobia(floyd 的变形)

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

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

简单DP.转移就可以.比较像floyd #include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cctype> #include <cstdio> #include

uvs 10048 Audiophobia floyd的变形

#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <cstdlib> #include <cmath> #include <set> #include <map> #include <vector> #include <cstri

UVAOJ 10048 - Audiophobia Floyd

链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=989 题意&题解: 紫书P365 代码: 31 int c, s, q; 32 int d[MAXN][MAXN]; 33 34 int main() { 35 ios::sync_with_stdio(false), cin.tie(0); 36 int cas = 1;

uva 10048 Audiophobia UVA - 10048

题目简介 一个无向正权图,求任意两个节点之间的路径里最短的路径长度. 直接Floyd解决,就是注意要把Floyd的DP式子改一下成 G[i][j]=min(G[i][j],max(G[i][k],G[k][j]));还有无向图要双向赋值 代码 #include <bits/stdc++.h> using namespace std; int G[110][110]; int main() { int n,m,t,cnt=0; while(cin>>n>>m>>

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

UVA10048 - Audiophobia(Floyd,最大值的最小化)

UVA10048 - Audiophobia(Floyd,最大值的最小化) UVA10048 - Audiophobia 题目大意:给定一无向图,每条边都有一个权值,现在给你起点和终点,要求你找出起点到终点途经的边的最大值,要求这个值尽量小,到不了输出no path. 解题思路:在floyd过程中,就可以记录下来.G[i][j] = min(G[i][j], max(G[i][k], G[k][j])); 代码: #include <cstdio> const int maxn = 105;