城市交通费
城市交通费
【问题描述】
有 n 个城市, 编号 1~n。 其中 i 号城市的繁华度为 pi。 省内有 m 条可以双向同行的高速
公路, 编号 1~m。 编号为 j 的高速公路连接编号为 aj 和 bj 两个城市, 经过高速公路的费用
是 wj。 若从城市 x 出发到某城市 y, 除了需要缴纳高速公路费用, 还要缴纳“城市建设费”
(为从 x 城市到 y 城市所经过的所有城市中繁华度的最大值, 包括 x 和 y 在内) 。
现提出 q 个询问, 每个询问给出一组 x 和 y, 你需要回答从 x 出发到 y 城市, 所需要的
最低交通费(高速公路费+城市建设费) 是多少。
【输入】
第一行三个整数 n,m,q。
第二行 n 个整数, 表示 p1~pn。
接下来 m 行中, 每行 3 个正整数, 第 j 行包含 Aj, Bj, Wj。
随后 Q 行每组两个正整数 x, y 表示一组询问。
【输出】
共 Q 行, 为对 Q 个问题的回答: x 城市到 y 城市的最小交通费用。
【样例输入】
5 7 2
2 5 3 3 4
1 2 3
1 3 2
2 5 3
5 3 1
5 4 1
2 4 3
3 4 4
1 4
2 3
【样例输出】
8 9
【数据范围及约定】
n≤250, m≤20000, Q≤10000, Pi≤10000, Wj≤2000, 保证任意两个城市可以互相到达。
【样例说明】
图中, 代表城市的格子中第一个数字是城市编号, 第二个红色数字是该城市的繁华度。
(1) 从城市 1 到城市 4 的最小交通费用路线是: 1 3 5 4; 公路费是 2+1+1=4; 城市建设费是
max{2,3,4,3}=4; 总交通费用 4+4=8。
(2) 从城市 2 到城市 3 的最小交通费用路线是: 2 5 3; 公路费是 3+1=4; 城市建设费是
max{5,4,3}=5; 总交通费用 4+5=9。
由于这个题是多组询问,显然要用floyd做,但关键是如何处理繁华度这个东西,因为最短路径和最小繁华度的路径很有可能不是一条路
我们可以考虑对繁华度进行排序,并记录下来排序之后每个点对应的编号(我也不知道why)
代码:
#include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<algorithm> using namespace std; int n,m,q,p[300],aj,bj,wj,x,y,f[300][300],a[300][300],top,t[300]; int cmp(int x,int y) { return p[x]<p[y]; } int main() { //freopen("road.in","r",stdin); //freopen("road.out","w",stdout); memset(a,63,sizeof(a)); top=0; scanf("%d%d%d",&n,&m,&q); for(int i=1;i<=n;i++) scanf("%d",&p[i]); for(int i=1;i<=m;i++) { scanf("%d%d%d",&aj,&bj,&wj); a[aj][bj]=min(a[aj][bj],wj); a[bj][aj]=min(a[bj][aj],wj); } //邻接矩阵存图 for(int i=1;i<=n;i++) { a[i][i]=0;//自己到自己的距离为0 t[i]=i;//节点的标号 } sort(t+1,t+1+n,cmp);//按照繁华度排序 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[i][j]=a[i][j]+max(p[i],p[j]); //初始化 for(int k=1;k<=n;k++)//floyd枚举中间点 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { a[i][j]=min(a[i][j],a[i][t[k]]+a[t[k]][j]);//松弛两个点之间的最短路 f[i][j]=min(f[i][j],a[i][j]+max(p[i],max(p[j],p[t[k]])));//最小花费 } for(int i=1;i<=q;i++) { scanf("%d%d",&x,&y); printf("%d\n",f[x][y]); } //fclose(stdin); //fclose(stdout); return 0; }
原文地址:https://www.cnblogs.com/lcezych/p/11010002.html
- 搭建LSTM(深度学习模型)做文本情感分类的代码
- 【大牛经验】高吞吐低延迟Java应用的垃圾回收优化
- shell的图形化实现简单示例(r3笔记第70天)
- 关于查询转换的一些简单分析(三) (r3笔记第69天)
- 【大牛经验】Web服务器的工作原理
- 使用shell定制addm脚本(r3笔记第88天)
- 【专业技术第十三讲】指针和内存泄露
- 【Java案例】余弦函数
- MySQL数据类型(r3笔记第87天)
- NLP真实项目:利用这个模型能够通过商品评论去预测一个商品的销量
- python + selenium + PhantomJS 获取腾讯应用宝APP评论
- 简单实用的sql小技巧(第二篇)(r3笔记第86天)
- Java代码效率优化【面试+提高】
- 利用逻辑回归模型判断用户提问意图
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法