2024蓝桥杯每日一题(DFS)

备战2024年蓝桥杯 -- 每日一题
Python大学A组

        试题一:奶牛选美
        试题二:树的重心
        试题三:大臣的差旅费
        试题四:扫雷


试题一:奶牛选美

【题目描述】

        听说最近两斑点的奶牛最受欢迎,约翰立即购进了一批两斑点牛。不幸的是,时尚潮流往往变化很快,当前最受欢迎的牛变成了一斑点牛。约翰希望通过给每头奶牛涂色,使得它们身上的两个斑点能够合为一个斑点,让它们能够更加时尚。牛皮可用一个 N×M的字符矩阵来表示,如下所示:

................
..XXXX....XXX...
...XXXX....XX...
.XXXX......XXX..
........XXXXX...
.........XXX....

        其中,X表示斑点部分。如果两个 X在垂直或水平方向上相邻(对角相邻不算在内),则它们属于同一个斑点,由此看出上图中恰好有两个斑点。约翰牛群里所有的牛都有两个斑点。约翰希望通过使用油漆给奶牛尽可能少的区域内涂色,将两个斑点合为一个。在上面的例子中,他只需要给三个 .. 区域内涂色即可(新涂色区域用 ∗ 表示):

................
..XXXX....XXX...
...XXXX*...XX...
.XXXX..**..XXX..
........XXXXX...
.........XXX....

        请帮助约翰确定,为了使两个斑点合为一个,他需要涂色区域的最少数量。

【输入格式】

        第一行包含两个整数 N和 M。

        接下来 N 行,每行包含一个长度为 M 的由 X 和 .. 构成的字符串,用来表示描述牛皮图案的字符矩阵。

【输出格式】

        输出需要涂色区域的最少数量。

【数据范围】

        1≤N,M≤50

【输入样例】

6 16
................
..XXXX....XXX...
...XXXX....XX...
.XXXX......XXX..
........XXXXX...
.........XXX....

【输出样例】

3

【解题思路】

        用2次BFS,第一次用来找出两个斑点,第二次用来找最短的连接线。

【Python程序代码】

from collections import *
n,m = map(int,input().split())
a = []
for i in range(n):a.append(list(input()))
st = [[0]*(m+5) for _ in range(n+5) ]
t,f = 1,0
for i in range(n):for j in range(m):if a[i][j]=='X' and st[i][j]==0:q=deque()q.append([i,j])st[i][j]=twhile q:tx,ty = q.popleft()for zx,zy in [(-1,0),(1,0),(0,-1),(0,1)]:nx,ny = tx+zx,ty+zyif nx<0 or nx>=n or ny<0 or ny>=m:continueif a[nx][ny]=='.' or st[nx][ny]:continuest[nx][ny]=tq.append([nx,ny])t += 1def bfs(i_,j_):q = deque()q.append([i_,j_,0])vis = [[0]*(m+5) for _ in range(n+5) ]vis[i_][j_]=1while q:tx,ty,z = q.popleft()if st[tx][ty]==2:return zfor zx,zy in [(-1,0),(1,0),(0,1),(0,-1)]:nx,ny = tx+zx,ty+zyif nx < 0 or nx >= n or ny < 0 or ny >= m: continueif vis[nx][ny]: continuevis[nx][ny]=1q.append([nx,ny,z+1])return 0res = n*m
for i in range(n):for j in range(m):if st[i][j]==1:tep = bfs(i,j)res = min(res,tep)
print(res-1)

试题二:树的重心

【题目描述】

        给定一颗树,树中包含 n个结点(编号 1∼n)和 n−1 条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。

【输入格式】

        第一行包含整数 n,表示树的结点数。

        接下来 n−1行,每行包含两个整数 a 和 b,表示点 a 和点 b 之间存在一条边。

【输出格式】

        输出一个整数 m,表示将重心删除后,剩余各个连通块中点数的最大值。

【数据范围】

        1≤n≤100000

【输入样例】

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

 【输出样例】

4

【解题思路】

         本体上就是一个树的遍历问题,遍历去掉每一个点,找出答案。

【Python程序代码】

n = int(input())
h,e,ne,idx = [-1]*(n+5),[0]*(2*n+5),[0]*(2*n+5),0
def add(a,b):global idxe[idx]=b; ne[idx]=h[a]; h[a]=idx; idx+=1
for i in range(n-1):a,b = map(int,input().split())add(a,b); add(b,a)
ans,st = n,[False]*(n+5)
def dfs(u):global ansst[u]=Trueres,sumv = 0,1i = h[u]while i!=-1:j = e[i]if not st[j]:s = dfs(j)res = max(res,s)sumv += si = ne[i]res = max(res,n-sumv)ans = min(ans,res)return sumv
dfs(1)
print(ans)

试题三: 大臣的旅费

【题目描述】

        很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T 国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。J 是 T 国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了 J最常做的事情。他有一个钱袋,用于存放往来城市间的路费。聪明的 J发现,如果不在某个城市停下来修整,在连续行进过程中,他所花的路费与他已走过的距离有关。具体来说,一段连续的旅途里,第 1千米的花费为 11,第 2 千米的花费为 12,第 3 千米的花费为 13,…,第 x 千米的花费为 x+10。也就是说,如果一段旅途的总长度为 1 千米,则刚好需要花费 11,如果一段旅途的总长度为 2 千米,则第 1千米花费 11,第 2 千米花费 12,一共需要花费 11+12=23。J 大臣想知道:他从某一个城市出发,中间不休息,到达另一个城市,所有可能花费的路费中最多是多少呢?

【输入样例】

【输出格式】

        输出一个整数,表示大臣 J 最多花费的路费是多少。

【数据范围】

【输入样例】

5
1 2 2
1 3 1
2 4 5
2 5 4

【输出样例】

135

【解题思路】

         可以发现本题就是求树的直径的问题,经典做法就是先遍历找出距离点d最远的点x,然后找到距离x点最优的y点,其中x到y的距离就是树的直径。

【Python程序代码】

n = int(input())
mp = [[]for i in range(n+1)]
for i in range(n-1):a,b,c = map(int,input().split())mp[a].append([b,c])mp[b].append([a,c])
dist = [0]*(n+1)
def dfs(st,father,distance):dist[st] = distancefor b,c in mp[st]:if b!=father:dfs(b,st,distance+c)
dfs(1,-1,0)
u = 1
for i in range(1,n+1):if dist[i]>dist[u]:u=i
dfs(u,-1,0)
for i in range(1,n+1):if dist[i]>dist[u]:u=i
s = dist[u]
print( s*10 + s*(1+s)//2 )   

 试题四:扫雷

【题目描述】

        小明最近迷上了一款名为《扫雷》的游戏。其中有一个关卡的任务如下:在一个二维平面上放置着 n 个炸雷,第 i个炸雷 (xi,yi,ri)表示在坐标 (xi,yi)(处存在一个炸雷,它的爆炸范围是以半径为 ri 的一个圆。为了顺利通过这片土地,需要玩家进行排雷。玩家可以发射 m 个排雷火箭,小明已经规划好了每个排雷火箭的发射方向,第 j 个排雷火箭 (xj,yj,rj)表示这个排雷火箭将会在 (xj,yj)处爆炸,它的爆炸范围是以半径为 rj 的一个圆,在其爆炸范围内的炸雷会被引爆。同时,当炸雷被引爆时,在其爆炸范围内的炸雷也会被引爆。现在小明想知道他这次共引爆了几颗炸雷?你可以把炸雷和排雷火箭都视为平面上的一个点。一个点处可以存在多个炸雷和排雷火箭。当炸雷位于爆炸范围的边界上时也会被引爆。

【输入格式】

        输入的第一行包含两个整数 n、m。

        接下来的 n 行,每行三个整数 xi,yi,ri表示一个炸雷的信息。

        再接下来的 m 行,每行三个整数 xj,yj,rj表示一个排雷火箭的信息。

【输出格式】

        输出一个整数表示答案。

【数据范围】  

【输入样例】

2 1
2 2 4
4 4 2
0 0 5

【输出样例】

2

 【解题思路】

        首先,对在同一点的炸雷和排雷火箭进行去重处理,然后枚举每一个排雷火箭,遍历排雷范围,如果能扫到雷则该炸雷也存放到排雷火箭队列。最后用排雷火箭队列模拟排雷。

【Python程序代码】

import sys
from collections import *
input = sys.stdin.readline
n, m = map(int, input().split())
num = Counter()
find = dict()
for _ in range(n):x, y, r = map(int, input().split())if (x, y) not in find:find[(x, y)] = 0num[(x, y)] += 1find[(x, y)] = max(find[(x, y)], r)
pq = deque()
f = dict()
for _ in range(m):x, y, r = map(int, input().split())if (x, y) not in f:f[(x, y)] = 0f[(x, y)] = max(f[(x, y)], r)
for (x, y), r in f.items():for i in range(x - r, x + r + 1):for j in range(y - r, y + r + 1):if (i - x) ** 2 + (j - y) ** 2 <= r ** 2:if (i, j) in find:pq.append((i, j, find[(i, j)]))del find[(i, j)]
res = 0
while pq:x, y, r = pq.popleft()res += num[(x, y)]for i in range(x - r, x + r + 1, 1):for j in range(y - r, y + r + 1, 1):if (i - x) ** 2 + (j - y) ** 2 <= r ** 2:if (i, j) in find:pq.append((i, j, find[(i, j)]))del find[(i, j)]
print(res)

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

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

相关文章

华为畅享 60X 用了这么久,说说真实感受

华为畅享 60X 上市也有1年了&#xff0c;为什么还要说这款手机&#xff0c;是因为用了这么久这款手机真的让人忍不住竖起大拇指&#xff01;给父母准备的这款机子&#xff0c;在千元机里没得说&#xff01; 华为畅享 60X 很适合中老年人用户&#xff0c;日常长辈们在用机时对手…

SqlServer2008(R2)(二)SqlServer2008(R2)安装和卸载注意事项整理

二、注意事项 1、 安装数据中心版 说明&#xff1a;此激活版仅用于测试和学习使用。 这是官方的下载页面&#xff08;需要付费订阅&#xff09;&#xff1a; http://msdn.microsoft.com/zh-cn/subscriptions/downloads/default.aspx 数据中心版&#xff1a; PTTFM-X467G-P7RH…

力扣模板题:检测字符串中数字是否递增

bool areNumbersAscending(char * s){//双指针操作&#xff0c;前指针保存前面一个数字字符int p0,q0;for(int i0;s[i];i){if(s[i]>0&&s[i]<9){pp*10s[i]-0;if(s[i1] ||s[i1]\0){//进行比较, 比较过后将p赋值q&#xff0c;q记录前面一个数字,因为数字均为小于100…

详解Python中的缩进和选择

缩进 Python最具特色的是用缩进来标明成块的代码。我下面以if选择结构来举例。if后面跟随条件&#xff0c;如果条件成立&#xff0c;则执行归属于if的一个代码块。 先看C语言的表达方式&#xff08;注意&#xff0c;这是C&#xff0c;不是Python!&#xff09; if ( i > 0 …

AI论文速读 | UniST:提示赋能通用模型用于城市时空预测

本文是时空领域的统一模型——UniST&#xff0c;无独有偶&#xff0c;时序有个统一模型新工作——UniTS&#xff0c;感兴趣的读者也可以阅读今天发布的另外一条。 论文标题&#xff1a;UniST: A Prompt-Empowered Universal Model for Urban Spatio-Temporal Prediction 作者&…

CornerStone.js之点数据获取相关函数

向后端导出点的坐标数据&#xff1a;由于piexlData是Float32Arrat数据类型&#xff0c;传递给后端 会报错&#xff0c;于是将其转换为二维数组&#xff0c;然后传递给后端即可&#xff0c;后端将其写入txt文件中 二维数组表示是512*512的一个数组&#xff0c;元素值只有0和1

AI基础知识(3)--神经网络,支持向量机,贝叶斯分类器

1.什么是误差逆传播算法&#xff08;error BackPropagation&#xff0c;简称BP&#xff09;&#xff1f; 是一种神经网络学习算法。BP是一个迭代学习算法&#xff0c;在迭代的每一轮使用广义的感知机学习规则对参数进行更新估计。基于梯度下降&#xff08;gradient descent&am…

linux学习之Socket

目录 编写socket-udp 第一步&#xff0c;编写套接字 第二步&#xff0c;绑定端口号 第三步&#xff0c;启动服务器&#xff0c;读取数据 第四步&#xff0c;接收消息并发回信息给对方 编写socket-Tcp 第一步&#xff0c;编写套接字 第二步&#xff0c;绑定端口号 第三步…

等保测评的知识

结合自己所学的知识和网络上的一些知识做个小总结。 目录 一、概念&#xff1a; 二、等级划分&#xff1a; 三、技术要求&#xff1a; 四、管理要求&#xff1a; 五、等保测评实施过程&#xff1a; 六、典型的网络架构&#xff1a; 一、概念&#xff1a; 全称为信息安全等级保…

【涨薪技术】0到1学会性能测试 —— 参数化关联

前言 上一次推文我们分享了性能测试工作原理、事务、检查点&#xff01;今天给大家带来性能测试参数化&#xff0c;检查点知识&#xff01;后续文章都会系统分享干货&#xff0c;带大家从0到1学会性能测试&#xff0c;另外还有教程等同步资料&#xff0c;文末免费获取~ 01、性…

2024.03.18作业

封装一个动物的基类&#xff0c;类中有私有成员&#xff1a;姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有&#xff1a;指针成员腿的个数&#xff0c;共有成员函数&#xff1a;叫 要求&#xf…

PyTorch学习笔记之激活函数篇(四)

4、 Leaky ReLU 函数 4.1 公式 Leaky ReLU函数的公式&#xff1a; f ( x ) { x , x > 0 λ x , x < 0 , λ ∈ ( 0 , 1 ) f(x) \begin{cases} x&,x>0 \\ \lambda x&,x<0,\lambda \in(0,1) \end{cases} f(x){xλx​,x>0,x<0,λ∈(0,1)​ Leakly R…

JavaScript做一个贪吃蛇小游戏,无需网络直接玩。

用JavaScript做一个贪吃蛇小游戏&#xff0c;无需网络 > 打开即可玩。 html代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>Title</title><style>#game{width: 344p…

Mysql 死锁案例4-delete 相邻记录导致死锁

死锁复现 CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),KEY c (c) ) ENGINEInnoDB DEFAULT CHARSETutf8;/*Data for the table t */insert into t(id,c,d) values (0,0,0),(5,5,5),(10,10,10),(15,15,15) 事务1事…

“先干后看”式循环

题目&#xff1a;计算 &#xff0c;直到最后一项小于 。 注意题目要求&#xff1a;计算到最后一项小于 。也就是这一项是要参与到计算中的&#xff0c;计算完这一项才能触发循环停止条件。 这种先运算后判断的情况很对do-while循环的胃口。 do就是做嘛&#xff0c;while就是…

代码随想录算法训练营第二十七天(二十六填休息) | 39. 组合总和、40、组合总和 II、131. 分割回文串

代码随想录算法训练营第二十七天&#xff08;二十六填休息&#xff09; | 39. 组合总和、40、组合总和 II、131. 分割回文串 39. 组合总和题目解法 40、组合总和 II题目解法 131. 分割回文串题目解法substr()用法 感悟 39. 组合总和 题目 解法 初始解法&#xff1a;出现重复组…

.NET高级面试指南专题十八【 外观模式模式介绍,提供了简化的接口,隐藏系统的复杂性】

介绍&#xff1a; 外观模式是一种结构设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用于访问子系统中的一组接口。外观模式定义了一个高层接口&#xff0c;使得子系统更容易使用。 原理&#xff1a; 外观类&#xff08;Facade Class&#xff09;&#xff1a;提供了一…

可视化场景(5):生产监控,比摄像头好用多了。

hello&#xff0c;我是贝格前端工场&#xff0c;本期分享可视化大屏在生产监控场景的应用&#xff0c;如需要定制&#xff0c;可以与我们联络&#xff0c;开始了。 实时监控 可视化大屏可以实时展示生产线上的各种关键指标和数据&#xff0c;如生产速度、设备状态、产量、质量…

html密码访问单页自定义跳转页面源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 密码访问单页自定义跳转页面&#xff0c;修改了的密码访问单页&#xff0c;添加了js自定义密码跳转页面。需要正确输入密码才能跳转目标网址。 二、效果展示 1.部分代码 代码如下&…

亚马逊、速卖通如何实现批量注册自动养号?

亚马逊和速卖通作为全球领先的跨境电商平台&#xff0c;其账号对于卖家而言具有重要的商业价值。随着跨境电商行业的蓬勃发展&#xff0c;越来越多的人对亚马逊、速卖通账号的需求日益增长&#xff0c;这也催生了批量注册和自动养号的需求。 跨境智星作为一款集成了批量注册账号…