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的更多相关文章
随机推荐
- vue 组件传值,(太久不用就会忘记,留在博客里,方便自己查看)
一 :父组件 传值给 子组件 方法: props //父组件 <template lang="html"> <div> <h3>我是父亲< ...
- jq animate 的第二写法
俩个参数的写法 例子: $('#div1').animate({num:'auto'},{ duration : 1000, //运动时间 easing : 'linear', //运动形式 ...
- BIO编程
在实际的工作开发中,传统的模型有client/service模型.client端和service端要进行通信的话,有一种套接字的方式.传统的socket编程,包含一个socket服务端和一到多个soc ...
- HTTP协议(2)
HTTP协议主要是有HTTP请求报文和HTTP响应报文组成的. HTTP请求报文主要分为四个部分: 第一部分:请求行.独占一行,由请求方法.请求url以及协议/版本组成: 第二部分:请求头,第二行到第 ...
- SQL SERVER级联查询及数据结构《存储过程-递归树形查询》
--创建表,插入数据 create table tb(id varchar(3) , pid varchar(3) , name varchar(10))insert into tb values(' ...
- js 元素添加多个监听
function addListener(element,e,fn){ if(element.addEventListener){ element.addEventListen ...
- WEB系统防退出账户,回退主页问题(2020最新最有效的方式没有之一)
WEB系统防退出账户,回退主页问题(2020最新最有效的方式没有之一) 很多小伙伴在web开发中都遇倒的问题? JavaWeb项目注销后,可能存在通过浏览器缓存回退的方式进入主页系统 WEB项目 ...
- mysql查询上月天数/当月第一天/上月第一天
select (DATEDIFF(DATE_ADD(curdate(), INTERVAL - DAY(curdate())+ 1 DAY), date_add(curdate()- DAY(curd ...
- create event[]
一.前言自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录.对数据进行汇总等等),来取代原先只能由操作系 ...
- 经典c程序100例==91--100
[程序91] 题目:时间函数举例1 1.程序分析: 2.程序源代码: #include "stdio.h" #include "time.h" void mai ...