SRX_Test_2_sound
声音(sound)
【问题描述】
雅礼中学的校门口在修建地铁,而由此带来的噪音问题让周边的居民困扰不已。环保局正在研究 一项评估模型,可以定量评价噪音的危害程度。这项评估模型是这样的:将每一条街道视作一条 无向边,而路口,也就是街道间的交叉口视作一个结点。给每 条街道赋予一个数值,表示该街道的平均噪音值。如图,假设 你从路口 A 去路口 G,依次经过 A-C-F-G 这条道路,沿途你需 要忍受的最大噪音值则是 140。而假如你走 A-B-E-G, A-B-D-G 或者 A-C-F-D-G 你需要忍受的最大噪音值则分别是 90, 120, 80。在所有 A 到 G 的路径中,可以验证 A-C-F-D-G 是一条最能 忍受的路径,因为没有比其噪音值 80 更低的路径了。现在给 你附近街道的相关信息,请你求出从一个路口走到另一个路 口,沿途你不得不忍受的最小噪音值。

【输入】
输入包含多组测试点。
每组测试的第 1 行包含三个整数 C (C≤ 100),S (S ≤ 1000) 和 Q (Q ≤ 10000),用空格分隔,其中 C 表 示路口的数量,S 表示街道的数量,Q 表示询问的次数。
接下来的 S 行每行包括 3 个整数,c1, c2 和 d,用空格分隔,分别表示连接 c1 和 c2(c1 != c2)两 个路口的街道的噪音值 d。
接下来的 Q 行每行包括两个整数,c1 和 c2(c1 != c2),用空格分隔,表示询问从路口 c1 走到路 口 c2 不得不忍受的最小噪音值。
输入以 C、S、Q 均为 0 作为结束标志。
【输出】
对于每一个测试点,在第一行输出测试点编号“Case”(从 1 开始),参照样例输出。接下来对于 输入的每一次询问输出一个整数,表示不得不忍受的最小噪声值。如果询问的两个路口并不能相 互到达,则输出“no path”。每两个测试点的输出用一个空白行隔开
考试时傻了,没做出来( @—@ )
思路;
根据Q的规模,我们显然不可能使用在线算法(用得出算你赢)
再联系题目,C的规模为100,大约是n3加上一些常数级别的处理(并查集,二分以及常数优化......),联系本题题面(最短路径问题变式)
关键词的重叠,告诉我们一个重要信息:
( 离线 , 最短路 , n3 ) = floyd
所以我们确定了思路,使用floyd解决这道题。
本题目标为求“所有路径中最大边长最小”。于此,我们惯用的方法二分难以使用。所以,我们只能在floyd的条件判断上下功夫。于此,首先,我们要明确目标:最大 的 最小
所以,我们这样写动规方程: f[i][j] = min(f[i][j], max(f[i][k], f[k][j]));
什么意思呢:f[i][j]是 他自己 与 (从i到k与从j到k中更大的那一个)中更小的那一个。
注 :他自己 、(从i到k与从j到k中更大的那一个)中更小的那一个 是对路径而言,所以选最小。
从i到k 、从j到k 是对边权而言,所以选最小。
至此,核心观点分析完毕。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100 + 5;
const int inf = 1e9 ;
int f[maxn][maxn];
int main() {
int n , m , q , cnt = 0; freopen("sound.in", "r", stdin);
freopen("sound.out", "w", stdout); while(~scanf("%d%d%d", &n, &m, &q)) {
if(n == 0 && m == 0 && q == 0)return 0; cnt ++;
printf("Case #%d\n", cnt); for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
f[i][j] = inf;
}
} for(int i = 1; i <= m; i++) {
int x, y, z;
scanf("%d%d%d", &x, &y, &z);
f[x][y] = z;
f[y][x] = z;
} for(int i = 1; i <= n; i++) {
f[i][i] = 0;
} for(int k = 1; k <= n; k++) {
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
f[i][j] = min(f[i][j], max(f[i][k], f[k][j]));
}
}
} for(int i = 1; i <= q; i++) {
int x, y;
cin >> x >> y; if(f[x][y] != inf)
printf("%d\n", f[x][y]);
else
printf("no path\n");
}
} return 0;
}
SRX_Test_2_sound的更多相关文章
随机推荐
- 常用物联网应用层协议(1)——先说HTTP协议
概念 简介 HTTP是一个属于应用层的面向对象的协议,目前使用最为广泛的是HTTP1.1协议.当然,许多网站已经开始支持HTTP2.0,HTTP2复杂度高于HTTP1.1,我们先从HTTP1.1说起. ...
- 微信小程序picker组件两列关联使用方式
在使用微信小程序picker组件时候,可以设置属性 mode = multiSelector 意为多列选择,关联选择,当第一列发生改变时侯,第二列甚至第三列发生相应的改变.但是官方文档上给的只 ...
- puk2367 拓扑排序
Description The system of Martians' blood relations is confusing enough. Actually, Martians bud when ...
- 活动可视化搭建系统——你的KPI被我承包了
前言 对于C端业务偏多的公司来说,在增长.运营等各方同学的摧残下永远绕不过去的一个坑就是大量的H5页面开发,它可能是一个下载.需求告知.产品介绍.营销活动等页面.此类需求都有几个明显的缺点: •开发性 ...
- Python的Opencv库怎么装
原文章写于时间2019.4 当时鼓捣Opencv库弄了好长时间,前前后后弄了五天,找了好多帖子不知道删除重装了多少次,现在把我试出来正确的方法给大家分享一下. 1.Pycharm 我用的是win10系 ...
- vue3.0-如何切换路由-路由模式ts
如何更换路由模式 vue3版本如何切换路由模式?(注:更改后要重启下项目才能看到效果.) 博主,我搜了大半天的,你是怎么找到的? 如下图可看到
- 【Kata Daily 190920】Square(n) Sum(平方加总)
题目: Complete the square sum function so that it squares each number passed into it and then sums the ...
- MySQL全面瓦解7:查询的过滤条件
概述 在实际的业务场景应用中,我们经常要根据业务条件获取并筛选出我们的目标数据.这个过程我们称之为数据查询的过滤.而过滤过程使用的各种条件(比如日期时间.用户.状态)是我们获取精准数据的必要步骤, 这 ...
- php生成gitbook路径
public function file_list() { $path='文件路径'; $arr=scandir($path); $i=0; foreach ($arr as $k=>$v) { ...
- leetcode129valid-parentheses
题目描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[] ...