声音(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. 常用物联网应用层协议(1)——先说HTTP协议

    概念 简介 HTTP是一个属于应用层的面向对象的协议,目前使用最为广泛的是HTTP1.1协议.当然,许多网站已经开始支持HTTP2.0,HTTP2复杂度高于HTTP1.1,我们先从HTTP1.1说起. ...

  2. [Luogu P3203] [HNOI2010]弹飞绵羊 (LCT维护链的长度)

    题面 传送门:洛谷 Solution 这题其实是有类似模型的. 我们先考虑不修改怎么写.考虑这样做:每个点向它跳到的点连一条边,最后肯定会连成一颗以n+1为根的树(我们拿n+1代表被弹出去了).题目所 ...

  3. Linux开机启动顺序启动顺序及配置开机启动

    Linux:开机启动顺序启动顺序及配置开机启动 开机启动顺序 1.加载内核 2.启动 init(/etc/inittab) pid=1 3.系统初始化 /etc/rc.d/rc.sysinit 4.运 ...

  4. css3 渐变 兼容

    .gradient{ background: #000000; background: -moz-linear-gradient(top,  #000000 0%, #ffffff 100%); ba ...

  5. Flink的sink实战之三:cassandra3

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. Linux系统下安装配置JDK(rpm方式及tar.gz方式)

    以前都是在Windows环境进行开发的,最近因工作需要:学习在Linux系统下搭建开发环境,自此记录搭建过程,以方便查阅. 本文借鉴了 Angel挤一挤 .小五 两位的博客. 准备材料: JDK下载链 ...

  7. itextpdf freemarker渲染

    现有需求涉及到打印pdf操作,简单找了俩种方式 在现有的模板上进行编辑,操作难度比较大 通过freemarker生成静态页面,在进行转换html,完美. 关于动态生成pdf,网上参考的挺多的,看来看去 ...

  8. php正则匹配整数

    <?php if(!preg_match('/^([1-9][0-9]*){1,10}$/',$buy_sku)) { $error['content'] = '请检查库存格式'; echo j ...

  9. python_摘要_加密

    import hashlib def get_md5(username,password): md5 = hashlib.md5(username.encode('utf-8')) # 加盐 md5. ...

  10. js 及jQery

    1.jQuery即是对象也是类. 2.append()方法的使用,连加操作. 例子: $(function(){ var obj=new Object(); obj.id=$("input[ ...