2024蓝桥杯每日一题(树形DP)

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

        试题一:病毒溯源
        试题二:没有上司的舞会
        试题三:生命之树


试题一:病毒溯源

【题目描述】

        病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株,而这些变异的病毒又可能被诱发突变产生第二代变异,如此继续不断变化。现给定一些病毒之间的变异关系,要求你找出其中最长的一条变异链。在此假设给出的变异都是由突变引起的,不考虑复杂的基因重组变异问题 —— 即每一种病毒都是由唯一的一种病毒突变而来,并且不存在循环变异的情况。

【输入格式】

        输入在第一行中给出一个正整数 N,即病毒种类的总数。于是我们将所有病毒从 0 到 N−1 进行编号。

        随后 N 行,每行按以下格式描述一种病毒的变异情况:

        k 变异株1 …… 变异株k

        其中 k 是该病毒产生的变异毒株的种类数,后面跟着每种变异株的编号。第 i 行对应编号为 i 的病毒(0≤i<N)。题目保证病毒源头有且仅有一个。

【输出格式】

        首先输出从源头开始最长变异链的长度。

        在第二行中输出从源头开始最长的一条变异链,编号间以 11 个空格分隔,行首尾不得有多余空格。如果最长链不唯一,则输出最小序列。

        注:我们称序列 {a1,…,an} 比序列 {b1,…,bn} “小”,如果存在 1≤k≤n 满足 ai=bi 对所有 i<k 成立,且 ak<bk。

【数据范围】

        1≤N≤104

【输入样例】

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

【输出样例】

4
0 4 9 1

【解题思路】

        题意就是输出根节点到叶子节点的最大长度的那条路径,如果有多条路径选择字典序最小的那一条。首先找到根节点,从根节点搜索最长路径采用DFS.

【Python程序代码】

# import sys
# sys.setrecursionlimit(10000)
n = int(input())
h,e,ne,idx = [-1]*(n+5),[0]*(2*n+5),[0]*(2*n+5),0
st,mp = [0]*(n+5),[0]*(n+5)
def add(a,b):global idxe[idx] = b; ne[idx]=h[a]; h[a]=idx; idx+=1
def dfs(u):res = 0mp[u]=-1i= h[u]while i!=-1:j = e[i]d = dfs(j)if res<d:res = d; mp[u]=jelif res==d:mp[u] = min(mp[u],j)i = ne[i]return res+1
for i in range(n):s = list(map(int,input().split()))if s[0]==0:continuefor j in range(1,len(s)):add(i,s[j])st[s[j]]=1root = 0
while st[root]:root+=1
print(dfs(root))
print(root,end=' ')
while mp[root]!=-1:root = mp[root]print(root,end=' ')

试题二:没有上司的舞会

【题目描述】

        Ural 大学有 N 名职员,编号为 1∼N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。

【输入格式】

        第一行一个整数 N。

        接下来 N行,第 i行表示 i号职员的快乐指数 Hi。

        接下来 N−1 行,每行输入一对整数 L,K,表示 K 是 L的直接上司。(注意一下,后一个数是前一个数的父节点,不要搞反)。

【输出格式】

        输出最大的快乐指数。

【数据范围】

        1≤N≤6000,
        −128≤Hi≤127

【输入样例】

7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5

【输出样例】

5

【解题思路】

        令f[u][0]表示不取节点的最大快乐指数、f[u][1]表示取节点u的最大快乐指数。所以f[u][0] += max(f[j][0],f[j][1])其中j为u的子节点。f[u][1] += f[j][0]。答案为max(f[root])。

【Python程序代码】

n = int(input())
h,e,ne,idx = [-1]*(n+5),[0]*(2*n+5),[0]*(2*n+5),0
f = [[0]*(3) for i in range(n+5)]
def add(a,b):global idxe[idx]=b; ne[idx]=h[a]; h[a]=idx; idx+=1
def dfs(u):f[u][1] = w[u]i = h[u]while i!=-1:j = e[i]dfs(j)f[u][0] += max(f[j][1],f[j][0])f[u][1] += f[j][0]i = ne[i]
st,w = [0]*(n+5), [0]*(n+5)
for i in range(1,n+1):w[i] = int(input())
for i in range(n-1):a,b = map(int,input().split())add(b,a)st[a]=1
root = 1
while st[root]:root+=1
dfs(root)
print(max(f[root]))

试题三:生命之树

【题目描述】

        在X森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集 S,使得对于 S 中的任意两个点 a,b,都存在一个点列 {a,v1,v2,…,vk,b}使得这个点列中的每个点都是 S 里面的元素,且序列中相邻两个点间有一条边相连。在这个前提下,上帝要使得 S 中的点所对应的整数的和尽量大。这个最大的和就是上帝给生命之树的评分。经过 atm 的努力,他已经知道了上帝给每棵树上每个节点上的整数。但是由于 atm 不擅长计算,他不知道怎样有效的求评分。他需要你为他写一个程序来计算一棵树的分数。

【输入格式】

        第一行一个整数 n 表示这棵树有 n 个节点。

        第二行 n 个整数,依次表示每个节点的评分。

        接下来 n−1行,每行 2 个整数 u,v,表示存在一条 u 到 v 的边。

        由于这是一棵树,所以是不存在环的。

        树的节点编号从 1 到 n。

【输出格式】

        输出一行一个数,表示上帝给这棵树的分数。

【数据范围】

        1≤n≤105,
        每个节点的评分的绝对值均不超过 106。

【输入数据】

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

【输出数据】

8

【解题思路】

        看起来像求根的直径,但是边是带权值的。实际上就是:找到一个无向图中的连通块,使得它的节点权值的总和最大。同样由于是无向图,为了减少搜索次数dfs的时候可以记录一下父节点。

【Python程序代码】

import sys
sys.setrecursionlimit(int(1e9))
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
w = [0] + list(map(int,input().split()))
for i in range(n-1):a,b = map(int,input().split())add(a,b); add(b,a)
f = [0]*(n+5)
def dfs(u,fa):f[u] = w[u]i = h[u]while i!=-1:j = e[i]if j!=fa:dfs(j,u)f[u] += max(0,f[j])i = ne[i]
dfs(1,0)
print(max(f[1:n+1]))

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

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

相关文章

MATLAB 自定义中值滤波(54)

MATLAB 自定义中值滤波(54) 一、算法介绍二、算法实现1.原理2.代码一、算法介绍 中值滤波,是一种常见的点云平滑算法,改善原始点云的数据质量问题,MATLAB自带的工具似乎不太友好,这里提供自定义实现的点云中值滤波算法,具体效果如下所示: 中值滤波前: 中值滤波后:…

前端性能优化-Table渲染速度优化

教务系统-排课页面性能优化总结 一、前言 在公司教务系统中,排课页面慢的令人发指,在某些情况由于数据量大导致页面主进程卡死,遂组织进行一次排查优化,现记录一下 二、效果对比 以下数据均为UAT环境 Performence对比 更改前: 主进程渲染时间为 8s 教务系统-排课页面性…

Ubuntu安装elasticsearch

Ubuntu系统上安装Elasticsearch可以通过多种方式进行&#xff0c;以下是几种常用的安装方法。在开始安装前&#xff0c;请确保你的系统是最新的&#xff0c;这可以通过运行sudo apt update和sudo apt upgrade命令来完成。 方法一&#xff1a;使用APT仓库安装&#xff08;推荐&…

【日常积累】指定ruby版本环境安装

背景说明 在redis的5.0版本之前&#xff0c;使用redis提供的redis-trib创建redis集群时还需要依赖ruby环境。当然有时候我们自已也需要安装指定ruby版本环境。下面是安装时的大致过程&#xff0c;以及过程中遇到的问题解决。我使用的环境是centos7&#xff0c;小版本差别应该不…

std::exit功能介绍和析构函数调用

std::exit函数调用后&#xff0c;系统会终止当前执行的程序&#xff08;无论主线程还是子线程调用&#xff0c;该程序都会被终止&#xff09;&#xff0c;在终止之前会有一些清理步骤会被执行&#xff1a; 静态存储对象&#xff08;静态的或者全局的&#xff09;会被析构&#…

MHA的实验部署

一、前期准备 准备四台虚拟机&#xff0c;一台主服务器&#xff0c;一台管理服务器&#xff0c;两台从服务器 在开始之前先要关闭所有服务器的防火墙&#xff0c;以免有一些麻烦 二、实际操作 2.1 配置主服务器 2.2 配置从服务器1和2 2.3 给主从服务器实现软链接 2.4 配置mysql…

Docker学习指南

前言 亲爱的读者们&#xff0c;欢迎来到这篇专为“小白”打造的 Docker 学习博客。作为一名运维工程师&#xff0c;我深知初学者在面对 Docker 这样的技术时可能会遇到的困惑与挑战。因此&#xff0c;本文将以浅显易懂的语言、详实的步骤和实用的示例&#xff0c;带领大家从零…

TypseScript再学习之类型别名和接口(10)

先看类型别名&#xff1a;使用关键字 type 声明,注意有等于号额 // 类型别名 使用关键字 type 声明,注意有等于号额 type Cat {name: string; }; let huahua: Cat {name: "花花", };type和interface不同之处在于&#xff1a;interface 是可以自动合并类型的&#…

【单片机 5.3开关检测】

文章目录 前言一、5.3开关检测1.1没按键按下的1.2有按键按下的 二、改进1.改进 三、独立键盘3.1为什么要取反3.2 实用的按键 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 课程需要&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xf…

春暖助学 梦想启航

&#xff08;通讯员&#xff1a;赵灿飞 图&#xff1a;杨美、孙红浪&#xff09; 春风拂面暖阳斜&#xff0c;爱心助学谱华章。为弘扬中华民族传统美德&#xff0c;动员社会力量&#xff0c;传播社会爱心&#xff0c;缓解宁乡西部特殊家庭学子学业面临的实际困难&#xff…

CorePoolExecutor夺命连环问?看你可以接受几招?

一、前言 今天我在看why技术的时候&#xff0c;看到了这个。发现这个没有全部的八股回答&#xff1f;于是我就结合自己的经验&#xff0c;分享下八股 二、八股问答 2.1了解JDK Executors线程池吗? Executor就是一个线程池框架&#xff0c;在开发中如果需要创建线程可优先考…

JMeter自定义日志与日志分析

1 JMeter日志概览 JMeter与Java程序一样&#xff0c;会记录事件日志&#xff0c;日志文件保存在bin目录中&#xff0c;名称为jmeter.log。当然&#xff0c;我们也可以在面板中直接察看日志&#xff0c;点击右上角黄色标志物可以打开日志面板&#xff0c;再次点击收起。 可见&…

从入门到实战:vue3路由知识点

本人在B站上关于vue3的尚硅谷的课程&#xff0c;以下是整理一些笔记。 1.两个知识点 1.路由组件通常存放在pages 或 views文件夹&#xff0c;一般组件通常存放在components文件夹。 组件可以分为&#xff1a; 1. 一般组件&#xff1a;亲手写标签出来的 2. 路由组件&#…

非关系型数据库——Redis配置与优化

目录 一、关系型数据库和非关系型数据库 1.定义 1.1关系型数据库 1.2非关系型数据库 2.非关系型数据库产生的背景 3.关系型数据库和非关系型数据库区别 3.1适用性不同 3.2数据一致性要求不同 3.3数据模型不同 3.4数据查询语言不同 3.5数据存储方式不同 3.6扩展方式…

PHP获取亚马逊商品详情api接口

亚马逊提供了一个名为Product Advertising API&#xff08;PA API&#xff09;的接口&#xff0c;可以用来获取亚马逊商品的详细信息。 要使用PA API&#xff0c;您需要进行以下几个步骤&#xff1a; 注册为亚马逊合作伙伴&#xff0c;并创建一个亚马逊开发人员账户。创建一个…

用Servlet实现一个简单的表白墙

1. 准备工作 创建项目,引入依赖...... 将静态页面放到项目中(放在webapp目录下): 当前,这个表白墙页面,已经可以输入内容,点击提交之后也能显示内容,后续后端要做的工作即: ①存档 用户点提交的时候,把刚才输入的内容通过网络传输给服务器,由服务器保存这个数据. ②读档 …

[中级]软考_软件设计_计算机组成与体系结构_04_寻址地址

寻址地址 概念指令的概念 寻址方式立即寻址方式直接寻址方式间接寻址方式寄存器寻址方式寄存器间接寻址方式往年真题 概念 指令的概念 一条指令就是机器语言的一个语句&#xff0c;它是一组有意义的二进制代码&#xff0c;指令的基本格式如下&#xff1a; 操作码字段地址码字…

基于springboot实现企业客户管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现企业客户管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述企…

鸿蒙HarmonyOS应用开发之Node-API支持的数据类型和接口

Node-API的数据类型 napi_status 是一个枚举数据类型&#xff0c;表示Node-API接口返回的状态信息。 每当调用一个Node-API函数&#xff0c;都会返回该值&#xff0c;表示操作成功与否的相关信息。 typedef enum {napi_ok,napi_invalid_arg,napi_object_expected,napi_stri…

计算机网络面试问题(一)

1.在浏览器中输⼊URL并按下回⻋之后会发⽣什么 2.TCP三次握⼿的过程,为什么三次握手 TCP&#xff08;传输控制协议&#xff09;的三次握⼿是建⽴⽹络连接的过程&#xff0c;确保通信双⽅能够正确地进⾏数据传输。 第⼀次握⼿&#xff08;SYN&#xff09;&#xff1a; 客户端&am…