【备战秋招】每日一题:2023.04.12-华为OD机式-第三题-水资源调度

news/2024/7/20 19:26:08 标签: 算法, java, python, 华为od

在线评测链接:P1191

题目内容

塔子哥老家有一座分层水库,这个水库按高度分为 N N N 层,从高到低编号分别为 0 , 1 , . . . , N − 1 0,1,...,N-1 0,1,...,N1 。除最低层外每一层上都有一个蓄水池,通过若干管道将每一层面水池中的水输送至最低层的水库中,管道之间通过水控制阀连接(水控制阀总数为 M M M ),现要找到每一层中离水库最近的关键水控制阀。

某一层的关键水控制阀定义为从该层蓄水池流向水库的水要么经过该水控制阀且不全部流向更低层(不考虑水库层)关键水控制阀,或者不经过该水控制阀且必须经过更低层(不考虑水库层)的关键水控制阀。

即:第 n n n ( n < N − 2 n \lt N - 2 n<N2 )层的关键水控制阀为 k n k_n kn ,从 n n n 层蓄水池流向水库的水如果流经 k n k_n kn ,则必须存在流经 k n k_n kn 的水未流经任何 k i k_i ki ( n < i ≤ N − 2 n\lt i\le N-2 n<iN2 ),如未流经 k n k_n kn ,则至少流经一个 k i k_i ki ( n < i ≤ N − 2 n\lt i\le N-2 n<iN2 )。 其中,第 N − 2 N-2 N2 层的关键水控制阀为 k N − 2 k_{N -2} kN2 ,必须使得所有从第 N − 2 N-2 N2 层蓄水池流向水库的水全部经过 k N − 2 k_{N-2} kN2

关键门阀有如下性质:

  1. 任何路径从水池流向水库的水,都必须经过至少一个关键水控制阀;
  2. 关键水控制阀从底层向上层确定,每层只有至多一个关键水控制阀;
  3. 如果一层中从蓄水池流向水库的水全部流经了更低层的关键水控制阀则该层无关键水控制阀;
  4. 如果一层中有多个水控制阀符合要求,则更靠近水库的确定为关键水控制阀;
  5. 水库层无关键水控制阀。

输入描述

第一行:输入两个整数 N N N M M M ,其分别表示层数与水控制阀总数。

第二行:输入 M M M 个数字表示 I D ID ID 0 0 0 M − 1 M-1 M1 的水控制阀所在层数,层数为递增顺序。

接下来输入 M M M 行,第 i i i 行中的第一个数字 k i k_i ki ,表示通过水控制阀 i − 1 i- 1 i1 下一步可到达的水控制阀个数。该行后面的 k i k_i ki 个数字分别表示这些水控制阀的编号 I D ID ID ,若 k i k_i ki 0 0 0 则则表示下一步没有可到达的水控制阀。

注:最后一层有且只有一个水控制阀连接到水库,不同层中水只能由高层流向低层,同一层中水只能由小 I D ID ID 的水控制阀流向大 I D ID ID 的水控制阀。每层的最小 I D ID ID 的水控制阀只能接收来自该层蓄水池的水。

其中, 1 ≤ M ≤ 2000 1\le M\le 2000 1M2000 1 ≤ N ≤ 2000 1\le N\le 2000 1N2000 0 ≤ k i ≤ M 0\le k_i \le M 0kiM

输出描述

按从高到低输出每层(不包含水库层) 离水库最近(从该水控制阀到水库所经历的水控制阀数最少)的关键水控制阀编号,若该层不存在关键水控制阀,则该层输出 − 1 -1 1

样例

样例1

输入

3 10
0 0 0 1 1 1 1 1 1 2 
2 1 2
1 7
1 4
2 4 5
1 6
1 6
2 7 8
1 9
1 9
0

输出

1 6

样例解释

先考虑第 1 1 1 层,由于没有更低层,所以该层的关键水控制阀需要水池 1 1 1 中的流向水库的水全部流经该水控制阀,所以 3 3 3 6 6 6 符合条件,而水控制阀 6 6 6 离水库最近,故第 1 1 1 层结果为水控制阀 6 6 6

接着考虑第 0 0 0 层,若 2 2 2 为关键水控制阀,则流经水控制阀 1 1 1 的水并没有经过任何关键水控制阀,不符合条件。

水控制阀 1 1 1 和水控制阀 0 0 0 均符合关键水控制阀的定义,而水控制阀 1 1 1 离水库更近,所以离水库最近的关键水控制阀为水控制阀 1 1 1

所以最终结果为 1 6

样例2

输入

6 1 9
0 0 0 1 1 2 2 2 2 3 3 4 4 4 4 4 4 4 5
1 1
2 2 4
2 7 8
1 4
1 7
1 6
1 7
4 8 12 14 15
1 15
1 10
0
2 12 13
1 14
1 14
2 15 16
1 17
1 18
1 18
0

输出

2 -1 7 -1 14

样例解释

先考虑第 4 4 4 层,由于没有更低层,所以该层的关键水控制阀需要水池1中的流解释向水库的水全部流经该水控制阀,所以 11 11 11 14 14 14 符合条件,而水控制阀 14 14 14 离水库最近,故第 1 1 1 层结果为水控制阀 14 14 14

接着考虑第 3 3 3 层,由于没有通向水库的水控制阀,故为 − 1 -1 1

接着考虑第 2 2 2 层,由于该层所有水流均流向水控制阀 7 7 7 ,而流经水控制阀 7 7 7 的水有流经更低层关键水控制阀 14 14 14 的也有流向非关键水控制阀 15 15 15 的故 7 7 7 为关键水控制阀, 5 , 6 5,6 5,6 水控制阀同理,但 7 7 7 离水库最近,故结果为水控制阀 7 7 7

接着考虑第 1 1 1 层,第一层流经水控制阀 3 , 4 3,4 3,4 的水均流向了更低层的关键水控制阀 7 7 7 故该层无关键水控制阀,结果为 − 1 -1 1

最后考虑第 0 0 0 层,可以得到 2 2 2 为关键水控制阀,由于该层未流经水控制阀 2 2 2 的水均流向更低层的关键水控制阀 7 7 7 ,且流经 2 2 2 的水有未流经任何关键水控制阀到达水库的路线,故 2 2 2 为关键水控制阀。同样 0 0 0 1 1 1 也为关键水控制阀,而 2 2 2 距离水库更近,故关键水控制阀为水控制阀 2 2 2

综上,最终结果为 2 -1 7 -1 14


http://www.niftyadmin.cn/n/461971.html

相关文章

【Leetcode60天带刷】day28回溯算法——93.复原IP地址 ,78.子集 , 90.子集II

​ 题目&#xff1a; 地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xf…

Python 函数:理解并使用 return 语句

你好&#xff0c;我是悦创。 函数在 Python 编程中起着至关重要的作用。他们封装了一段代码&#xff0c;并给它一个名字&#xff0c;这样我们可以在程序的任何地方&#xff0c;通过这个名字来调用这段代码。return 是函数的一个重要组成部分&#xff0c;它可以使函数输出一个值…

gitbook-cli早已停止维护,推荐使用其分支honkit

目录 背景我发现的不同之处gitbook/honkit的快速入手首先安装honkit1 初始化电子书2 写SUMMARY编写书本配置&#xff08;信息以及插件&#xff09;推荐的latex渲染插件 3 build和serve打包电子书 背景 因为gitbook-cli[1]停止维护了&#xff0c;所以在新版本的nodejs环境安装gi…

RPA从哪些方面考量流程是否适合自动化

流程适合性 您可以使用以下标准评估流程是否适合自动化&#xff1a; 基于规则 可通过预定义逻辑捕获在流程中做出的决策&#xff08;包括数据解释&#xff09;。这样带来的结果是&#xff0c;异常率要么很低&#xff0c;要么包含在业务逻辑中。 可自动化和/或重复性流程 我们…

ruoyi-cloud版本(一)项目的下载与本地运行(亲测有效)

目录 1 架构2 架构图3 源码下载4 创建数据库5 下载nacos与运行6 打开运行基础模块&#xff08;启动没有先后顺序&#xff09;7 启动前端 1 架构 com.ruoyi ├── ruoyi-ui // 前端框架 [80] ├── ruoyi-gateway // 网关模块 [8080] ├── ruoyi…

k8s控制器之job--第一弹job简述

Kubernetes中的 Job 对象将创建一个或多个 Pod&#xff0c;并确保指定数量的 Pod 可以成功执行到进程正常结束&#xff1a; 当 Job 创建的 Pod 执行成功并正常结束时&#xff0c;Job 将记录成功结束的 Pod 数量当成功结束的 Pod 达到指定的数量时&#xff0c;Job 将完成执行删…

窥探系列之Mybatis-plus 参数名解析

ParamNameResolver 当我们使用 MyBatis 进行数据库操作时&#xff0c;常常需要编写 SQL 语句&#xff0c;并且需要将方法的参数传递给 SQL 语句中的参数占位符。MyBatis 提供了一种方便的方式来实现这一点&#xff0c;即使用 #{paramName} 这种形式的参数占位符&#xff0c;并…

chatgpt赋能python:Python电脑上图标是什么样子?

Python电脑上图标是什么样子&#xff1f; 在计算机系统中&#xff0c;图标是一种可视化的元素&#xff0c;用于代表具体的应用程序或文件。Python是一种开源的高级编程语言&#xff0c;越来越多的人开始使用它进行软件开发和数据科学。在电脑上&#xff0c;Python的图标是怎样…