[蓝桥杯 2022 国 A] 环境治理(C++,Floyd,二分法)

news2025/1/13 16:39:07

题目描述

LQ 国拥有 n n n 个城市,从 0 0 0 n − 1 n - 1 n1 编号,这 n n n 个城市两两之间都有且仅有一条双向道路连接,这意味着任意两个城市之间都是可达的。每条道路都有一个属性 D D D,表示这条道路的灰尘度。当从一个城市 A 前往另一个城市 B 时,可能存在多条路线,每条路线的灰尘度定义为这条路线所经过的所有道路的灰尘度之和,LQ 国的人都很讨厌灰尘,所以他们总会优先选择灰尘度最小的路线。

LQ 国很看重居民的出行环境,他们用一个指标 P P P 来衡量 LQ 国的出行环境, P P P 定义为:

P = ∑ i = 0 n − 1 ∑ j = 0 n − 1 d ( i , j ) P=\sum \limits_{i=0}^{n-1} \sum \limits_{j=0}^{n-1} d(i,j) P=i=0n1j=0n1d(i,j)

其中 d ( i , j ) d(i,j) d(i,j) 表示城市 i i i 到城市 j j j 之间灰尘度最小的路线对应的灰尘度的值。

为了改善出行环境,每个城市都要有所作为,当某个城市进行道路改善时,会将与这个城市直接相连的所有道路的灰尘度都减少 1 1 1,但每条道路都有一个灰尘度的下限值 L L L,当灰尘度达到道路的下限值时,无论再怎么改善,道路的灰尘度也不会再减小了。

具体的计划是这样的:

  • 1 1 1 天, 0 0 0 号城市对与其直接相连的道路环境进行改善;
  • 2 2 2 天, 1 1 1 号城市对与其直接相连的道路环境进行改善;

……

  • n n n 天, n − 1 n - 1 n1 号城市对与其直接相连的道路环境进行改善;
  • n + 1 n + 1 n+1 天, 0 0 0 号城市对与其直接相连的道路环境进行改善;
  • n + 2 n + 2 n+2 天, 1 1 1 号城市对与其直接相连的道路环境进行改善;

……

LQ 国想要使得 P P P 指标满足 P ≤ Q P \leq Q PQ。请问最少要经过多少天之后, P P P 指标可以满足 P ≤ Q P \leq Q PQ。如果在初始时就已经满足条件,则输出 0 0 0;如果永远不可能满足,则输出 − 1 -1 1

输入格式

输入的第一行包含两个整数 n , Q n, Q n,Q,用一个空格分隔,分别表示城市个数和期望达到的 P P P 指标。

接下来 n n n 行,每行包含 n n n 个整数,相邻两个整数之间用一个空格分隔,其中第 i i i 行第 j j j 列的值 D i , j ( D i , j = D j , i , D i , i = 0 ) D_{i,j} (D_{i,j}=D_{j,i},D_{i,i} = 0) Di,j(Di,j=Dj,i,Di,i=0) 表示城市 i i i 与城市 j j j 之间直接相连的那条道路的灰尘度。

接下来 n n n 行,每行包含 n n n 个整数,相邻两个整数之间用一个空格分隔,其中第 i i i 行第 j j j 列的值 L i , j ( L i , j = L j , i , L i , i = 0 ) L_{i,j} (L_{i,j} = L_{j,i}, L_{i,i} = 0) Li,j(Li,j=Lj,i,Li,i=0) 表示城市 i i i 与城市 j j j 之间直接相连的那条道路的灰尘度的下限值。

输出格式

输出一行包含一个整数表示答案。

样例 #1

样例输入 #1

3 10
0 2 4
2 0 1
4 1 0
0 2 2
2 0 0
2 0 0

样例输出 #1

2

提示

【样例说明】

初始时的图如下所示,每条边上的数字表示这条道路的灰尘度:

此时每对顶点之间的灰尘度最小的路线对应的灰尘度为:

  • d ( 0 , 0 ) = 0 , d ( 0 , 1 ) = 2 , d ( 0 , 2 ) = 3 d(0, 0) = 0, d(0, 1) = 2, d(0, 2) = 3 d(0,0)=0,d(0,1)=2,d(0,2)=3
  • d ( 1 , 0 ) = 2 , d ( 1 , 1 ) = 0 , d ( 1 , 2 ) = 1 d(1, 0) = 2, d(1, 1) = 0, d(1, 2) = 1 d(1,0)=2,d(1,1)=0,d(1,2)=1
  • d ( 2 , 0 ) = 3 , d ( 2 , 1 ) = 1 , d ( 2 , 2 ) = 0 d(2, 0) = 3, d(2, 1) = 1, d(2, 2) = 0 d(2,0)=3,d(2,1)=1,d(2,2)=0

初始时的 P P P 指标为 ( 2 + 3 + 1 ) × 2 = 12 (2 + 3 + 1) \times 2 = 12 (2+3+1)×2=12,不满足 P ≤ Q = 10 P \leq Q = 10 PQ=10;

第一天, 0 0 0 号城市进行道路改善,改善后的图示如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVkfYzSE-1673431827042)(https://cdn.luogu.com.cn/upload/image_hosting/mrhf5wx6.png)]

注意到边 ( 0 , 2 ) (0, 2) (0,2) 的值减小了 1 1 1,但 ( 0 , 1 ) (0, 1) (0,1) 并没有减小,因为 L 0 , 1 = 2 L_{0,1} = 2 L0,1=2 ,所以 ( 0 , 1 ) (0, 1) (0,1) 的值不可以再减小了。此时每对顶点之间的灰尘度最小的路线对应的灰尘度为:

  • d ( 0 , 0 ) = 0 , d ( 0 , 1 ) = 2 , d ( 0 , 2 ) = 3 d(0, 0) = 0, d(0, 1) = 2, d(0, 2) = 3 d(0,0)=0,d(0,1)=2,d(0,2)=3
  • d ( 1 , 0 ) = 2 , d ( 1 , 1 ) = 0 , d ( 1 , 2 ) = 1 d(1, 0) = 2, d(1, 1) = 0, d(1, 2) = 1 d(1,0)=2,d(1,1)=0,d(1,2)=1
  • d ( 2 , 0 ) = 3 , d ( 2 , 1 ) = 1 , d ( 2 , 2 ) = 0 d(2, 0) = 3, d(2, 1) = 1, d(2, 2) = 0 d(2,0)=3,d(2,1)=1,d(2,2)=0

此时 P P P 仍为 12 12 12

第二天,1 号城市进行道路改善,改善后的图示如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KFsHlrHB-1673431827042)(https://cdn.luogu.com.cn/upload/image_hosting/tjxis3yb.png)]

此时每对顶点之间的灰尘度最小的路线对应的灰尘度为:

  • d ( 0 , 0 ) = 0 , d ( 0 , 1 ) = 2 , d ( 0 , 2 ) = 2 d(0, 0) = 0, d(0, 1) = 2, d(0, 2) = 2 d(0,0)=0,d(0,1)=2,d(0,2)=2
  • d ( 1 , 0 ) = 2 , d ( 1 , 1 ) = 0 , d ( 1 , 2 ) = 0 d(1, 0) = 2, d(1, 1) = 0, d(1, 2) = 0 d(1,0)=2,d(1,1)=0,d(1,2)=0
  • d ( 2 , 0 ) = 2 , d ( 2 , 1 ) = 0 , d ( 2 , 2 ) = 0 d(2, 0) = 2, d(2, 1) = 0, d(2, 2) = 0 d(2,0)=2,d(2,1)=0,d(2,2)=0

此时的 P P P 指标为 ( 2 + 2 ) × 2 = 8 < Q (2 + 2) \times 2 = 8 < Q (2+2)×2=8<Q,此时已经满足条件。

所以答案是 2 2 2

【评测用例规模与约定】

  • 对于 30 % 30\% 30% 的评测用例, 1 ≤ n ≤ 10 1 \leq n \leq 10 1n10 0 ≤ L i , j ≤ D i , j ≤ 10 0 \leq L_{i,j} \leq D_{i,j} \leq 10 0Li,jDi,j10
  • 对于 60 % 60\% 60% 的评测用例, 1 ≤ n ≤ 50 1 \leq n \leq 50 1n50 0 ≤ L i , j ≤ D i , j ≤ 1 0 5 0 \leq L_{i,j} \leq D_{i,j} \leq 10^5 0Li,jDi,j105
  • 对于所有评测用例, 1 ≤ n ≤ 100 1 \leq n \leq 100 1n100 0 ≤ L i , j ≤ D i , j ≤ 1 0 5 0 \leq L_{i,j} \leq D_{i,j} \leq 10^5 0Li,jDi,j105 0 ≤ Q ≤ 2 31 − 1 0 \leq Q \leq 2^{31} - 1 0Q2311

蓝桥杯 2022 国赛 A 组 F 题。

解题思路:

emm这题虽然描述有点长,但实际思路并不难想

因为对于 P P P的定义已经给出很明显的提示了——多源最短路径,用Floyd

然后就是本题的图的特殊之处:灰尘度的变化

这个特殊之处直接导致了想一次Floyd直接解决问题是不可能的

因为Floyd得到的最短路径抽象去了路径上的点,那样就不知道哪条最短路径会缩短了

所以要想其他办法

去思考本题的答案会发现:

1)天数越多,就越可能达标

2)本题要求的是最少需要多少天

这不就是二分法

然后就明白了大概的解题思路:二分搜索天数,用Floyd判断这天的灰尘度是否达标

接下来就是一些细节的问题了,例如

对于完全图用二维数组存图、每轮搜索之前都需要根据天数初始化图的边权

计算得到天数的范围是 0 0 0~ 1 0 7 10^7 107

以及最重要的,关于数据范围的问题

q q q的最大值已经超出了int所能达到的精度,应该用long long存储

即使是long long,累加结束之后也可能溢出( 边权和 m a x = 1 5 3 边权和max = 1^{5^3} 边权和max=153),故需要加上正数判断

说了这么多,最后,AC代码如下

//Floyd
#include <iostream>
using namespace std;
const int max_n = 100;
const int max_l = 1e5;
const int max_d = 1e5;
const long long max_q = 0xFFFFFFFF - 1;
const int NaN = 0x3F3F3F3F;

int map[max_n][max_n] = { 0 };//存图
int limit[max_n][max_n] = { 0 };//最小灰尘度
int ans = -1;
int n;
long long q;
int dist[max_n][max_n] = { 0 };//临时图

bool floyd(int day) {
	for (int i = 0; i < n; i++) {//初始化
		for (int j = 0; j < n; j++) {
			dist[i][j] = max(map[i][j] - day / n - (day % n >= i + 1 ? 1 : 0), limit[i][j]);
		}
	}

	for (int i = 0; i < n; i++) {//Floyd
		for (int j = 0; j < n; j++) {
			for (int z = 0; z < n; z++) {
				dist[j][z] = min(dist[j][z], dist[j][i] + dist[i][z]);
			}
		}
	}

	long long sum = 0;
	for (int i = 0; i < n; i++) {//累加
		for (int j = 0; j < n; j++) {
			sum += dist[i][j];
		}
	}
	if (sum >= 0 && sum <= q) {//溢出判断 && 达标
		ans = day;
		return true;
	}
	else return false;
}

void bin_search() {//二分
	int left = -1, right = max_n * max_l + 1;
	while (left + 1 != right) {
		int middle = (left + right) / 2;
		if (floyd(middle)) {
			right = middle;
		}
		else {
			left = middle;
		}
	}
}

int main() {
	cin >> n >> q;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			cin >> map[i][j];
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			cin >> limit[i][j];

	bin_search();
	cout << ans;
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux 中用rancher k8s 部署springboot项目

前期条件: linux--》ECS服务器: rancher集群: 操作流程: 1、制作简单springboot项目使用docker生成镜像项目端口:8080并写一个测试controller

Go 1.19.3 interface原理简析

interface 接口&#xff0c;分为有方法签名的接口和空接口 interface{fn()…} 有方法签名的接口&#xff0c;底层运行时结构 iface iface src/runtime/runtime2.go type iface struct {tab *itab // 接口类型itab, i-table的缩写data unsafe.Pointer // 接口值指针…

互联网应用的架构演变之路

文章目录单体应用架构垂直应用架构分布式架构SOA架构微服务架构SOA架构&微服务架构对比分布式应用开发解决方案随着互联网的发展&#xff0c;网站的应用也不断扩大&#xff0c;从而导致系统架构不断的进行变化&#xff0c;从互联网早起到现在&#xff0c;系统架构大致经历了…

用Python画一只小兔子,祝您新年前途似锦,大展宏图

用Python画一只小兔子&#xff0c;祝您新年前途似锦&#xff0c;大展宏图 兔年到了&#xff0c;祝大家新年前途似锦&#xff01;大展宏图&#xff01; 2021牛年&#xff0c;我用Python画了一头金牛&#xff0c;参考&#xff1a;Python画金牛 2022虎年&#xff0c;我用Python画…

MarkDown语法 + Typora笔记本

目录 一、多级标题 二、有序列表 三、无序列表 四、任务列表 五、行内代码 六、代码块 七、插入表格 八、插入图片 一、多级标题 1、语法 一级标题&#xff1a;# 二级标题&#xff1a;## 三级标题&#xff1a;### 四级标题&#xff1a;#### 五级标题&#xff1a;…

stackoverflow网站左下角弹框点击我接收所有cookie没反应怎么解决?

问题描述&#xff1a;打开stackoverflow网页后左下角总是有一个弹窗&#xff0c;点击接受所有cookie没有反应。 产生原因&#xff1a;因为是外网&#xff0c;因此点击按钮触发的时候被拦截了。 微软自带的edge浏览器&#xff1a; 打开浏览器进入扩展 选择管理扩展 获取Micro…

如何轻松应对IB数学?

如何轻松应对IB数学&#xff1f;同学想要在IB数学科取得好成绩&#xff0c;可以从两个方面来着手。 1.复习技巧 第一个是复习技巧。这方面&#xff0c;同学要清楚知道自己读的课程&#xff0c;它的教学大纲&#xff08;Syllabus&#xff09;要求是什么&#xff0c;还有它背后想…

【Bp2Lua】常量折叠和变量折叠

【Bp2Lua】常量折叠和变量折叠 谈一下编译器折叠优化算法 动机 变量折叠是 bp2lua 早期确定的两个技术卡点之一 bp2lua 做尽可能保守和必要的优化&#xff0c;提升生成代码的可读性&#xff0c;方便在生成代码上进行二次开发 常量折叠 常量折叠 - 维基百科&#xff0c;自…

Stlink固件更新问题“ST-Link is not in the dfu mode Please restart it“的解决方法

安装stlink utility&#xff1a;官网下载&#xff1a;https://www.st.com/content/st_com/zh.html在ST-LINK utility中连接芯片&#xff0c;提示仿真器版本过低&#xff0c;点击更新&#xff0c;报错提示&#xff1a;“ST LINK is not in the DFU mode plesse restart it”操作…

Day 6 Bean 的生命周期

建议浏览顺序从Day 1 开始。1 Bean的声明周期Spring Bean的生命周期是从 Bean 实例化之后&#xff0c;即通过反射创建出对象之后&#xff0c;到Bean成为一个完整对象&#xff0c;最终存储到单例池中&#xff0c;这个过程被称为Spring Bean的生命周期。Spring Bean的生命周期大体…

ArcGIS JS API分页查询小结

如果遇到发布的服务要素非常多&#xff0c;比如点要素&#xff0c;此时如果想要查询相关的属性或几何信息&#xff0c;如果使用featurelayer的query方法&#xff0c;可能会遇到server后台返回数限制&#xff0c;而只能返回获取到返回数上限的要素数目。 一个简单的方法是&…

nginx学习笔记4(小d课堂)

linux服务器安装jdk和jar包上传 我们把我们的文件放到我们的路径下&#xff0c;这部分之前学过了&#xff0c;这里我们再来复习一遍。 然后我们去解压这个压缩包&#xff1a; 然后我们给这个文件改个名字&#xff1a; 然后我们要去配置环境变量&#xff1a; 在文件末尾加 然后我…

新库上线 | CnOpenDataA股上市公司招投标数据

A股上市公司招投标数据 一、数据简介 招投标是指在市场经济条件下进行大宗货物的买卖、工程建设项目的发包与承包以及服务项目的采购与提供时所采取的一种普遍交易方式。招标和投标是一种商品交易行为&#xff0c;是交易过程的两个方面。历经三十多年的发展&#xff0c;我国已…

resultType自动映射与结果映射resultMap

今天继续完善一下mybatis系列相关博客&#xff0c;以便查阅&#xff0c;同时也希望能帮助到有需要的小伙伴&#xff0c;各位看到此博客的小伙伴&#xff0c;如有不对的地方请及时通过私信我或者评论此博客的方式指出&#xff0c;以免误人子弟。多谢&#xff01; 这一篇记录一下…

week 9 吴恩达 迁移学习 多任务学习 端到端学习

文章目录一、错误分析二、快速构建系统然后迭代三、训练和测试的不同数据分布1、不匹配数据的偏差和方差2、解决数据不匹配问题。四、迁移学习 transfer learning五、多任务学习 multi-task learning六、端到端 end-to-end learning一、错误分析 当我们在构建一个系统时&#…

自动驾驶BEV火了,再给它加点脑洞会靠谱吗?

作者 | 洪泽鑫 编辑 | Bruce百度今年Create大会上辅助驾驶板块的内容挺硬核的&#xff0c;不在这个行业内基本听不懂。 正好是研究兴趣所在&#xff0c;结合百度给的资料&#xff0c;试着来中译中一下。 总的来说&#xff0c;百度是弄了一个车路一体的BEV感知方案——叫UniBEV。…

基于FPGA的UDP 通信(二)

引言前文链接&#xff1a;基于FPGA的UDP 通信&#xff08;一&#xff09;本文继续介绍与以太网数据协议相关的内容。以太网帧协议IEEE802.3标准规定了&#xff0c;以太网数据传输的格式&#xff1a;字段解释&#xff1a;字段名称字段长度/&#xff08;字节&#xff09;含义前导…

【MyBatis】第二篇:核心配置文件常用标签

前提 Mbatis的配置文件中的顺序如下&#xff1a; MyBatis核心配置文件中的标签必须安装指定的顺序配置。 (properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?…

SweetAlert让消息弹出窗口更加具有个性化!

SweetAlertSweetAlert是指可对JavaScript标准功能alert()和confirm()进行个性化定制的库。SweetAlert的要点官网上有很多示例&#xff0c;看了这些基本上就OK了。但是&#xff0c;在kintone上使用时&#xff0c;【弹出消息后更新页面】这个处理只参照示例来写的话&#xff0c;一…

微信小程序分包

1.什么是分包&#xff1f; 分包指的是把一个完整的小程序项目&#xff0c;按照需求划分为不同的子包&#xff0c;在构建时打包成不同的分包&#xff0c;用户在使用时按需进行加载。 2.分包的好处对小程序进行分包的好处主要有以下两点: 可以优化小程序首次启动的下载时间在多…