当前位置: 首页 > news >正文

备战蓝桥杯---树形DP基础3

上一次我们讲了二叉苹果树,现在我们加一点难度,从二叉变成了多叉苹果树。

这样子我们就不可以直接按照上次的方法DP,我们其实可以发现,我们可以用类似背包的思想求解,这就是所谓的树上背包。

我们先加进第一个儿子来跟新1--m的解,然后再让第二个进来更新,这样子就求出来了。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,q,x,y,head[200],v[200],cnt,z,dp[110][110];
struct node{int dian,next,quan;
}edge[210];
void merge(int x,int y,int z){edge[++cnt].dian=y;edge[cnt].quan=z;edge[cnt].next=head[x];head[x]=cnt;
}
void dfsquan(int root,int fa){for(int i=head[root];i!=-1;i=edge[i].next){if(edge[i].dian==fa) continue;v[edge[i].dian]=edge[i].quan;dfsquan(edge[i].dian,root);}return;
}
void dfsdp(int root,int fa){for(int j=q+1;j>=1;j--){dp[root][j]=v[root];}dp[root][0]=0;for(int i=head[root];i!=-1;i=edge[i].next){if(fa==edge[i].dian) continue;int ckck=edge[i].dian;dfsdp(ckck,root);for(int j=q+1;j>=1;j--){for(int k=0;k<=j-1;k++){dp[root][j]=max(dp[ckck][k]+dp[root][j-k],dp[root][j]);}}}
}
int main(){cin>>n>>q;memset(head,-1,sizeof(head));for(int i=1;i<=n-1;i++){cin>>x>>y>>z;merge(x,y,z);merge(y,x,z);}dfsquan(1,-1);dfsdp(1,-1);cout<<dp[1][q+1];
}

这里有两点注意:

1.v[root]操作不应该放在循环里面,否则会重复操作(若为边权可以)

2.转移方程中应为dp[root][j-k]而不是dp[root][j-k-1],因为root时已经把root点算进去了,不用为root留空间。

接题:

其实我们可以不用DP:

我们可以先选任意一点DFS求出权值最大的子链,我们可以证明权值最大的子链的端点之一一定是这个DFS后的端点。

下面进行证明:

我们再来看看树形DP的解法:

我们令f[i]表示以i为根的子树的最大子链,有两种情况,1.它经过i 2.他没有经过

对于经过i,我们只要把以i为起点DFS的最大长度与第二大长度相加即可。

这里我们可以简化一下:

我们令ans为答案值,dp[i]为以i为起点的最大权值,我们在求dp[i]的同时维护ans即可。

其中相加操作dp[i]记录了到目前为止的最大值(有点类似背包),通过dp[i]+dp[v]就实现了最大值与次大值相加的操作,最后维护一下dp[i]即可。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node1{int dian,next;
}edge[200010];
int head[100010],n,a[100010],cnt,u,v,dp[100010],ans=-10000000;
void merge(int x,int y){edge[++cnt].dian=y;edge[cnt].next=head[x];head[x]=cnt;
}
void dfsdp(int root,int fa){dp[root]=a[root];ans=max(ans,a[root]);for(int i=head[root];i!=-1;i=edge[i].next){if(edge[i].dian==fa) continue;dfsdp(edge[i].dian,root);ans=max(ans,dp[edge[i].dian]);ans=max(ans,dp[root]+dp[edge[i].dian]);dp[root]=max(dp[root],a[root]+dp[edge[i].dian]);}return;
}
signed main(){cin>>n;memset(head,-1,sizeof(head));for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}for(int i=1;i<=n-1;i++){scanf("%lld%lld",&u,&v);merge(u,v);merge(v,u);}dfsdp(1,-1);cout<<ans;
}

相关文章:

备战蓝桥杯---树形DP基础3

上一次我们讲了二叉苹果树&#xff0c;现在我们加一点难度&#xff0c;从二叉变成了多叉苹果树。 这样子我们就不可以直接按照上次的方法DP&#xff0c;我们其实可以发现&#xff0c;我们可以用类似背包的思想求解&#xff0c;这就是所谓的树上背包。 我们先加进第一个儿子来…...

IEEE Transactions on Industrial Electronics工业电子TIE修改稿注意事项及提交须知

一、背景 兔年末投了一篇TIE&#xff0c;手稿初次提交的注意事项也整理成了博客IEEE Transactions on Industrial Electronics工业电子TIE论文投稿须知&#xff0c;获得了许多点赞和收藏。最近也收到了审稿结果&#xff0c;给的意见是大修major revision&#xff0c;总之只要不…...

c#委托的三种实现方式

委托是实质一个类&#xff0c;主要目的是将方法当作参数进行传递。 委托是.NET编程的精髓之一&#xff0c;在日常编程中经常用到&#xff0c;在C#中实现委托主要有Func、Action、delegate三种方式&#xff0c;本节主要就这三种委托的用法通过实例展开讲解。 Func用法解析 【F…...

c/c++|红黑树|分析应用|锚点

红黑树是一种自平衡的二叉查找树&#xff0c;它保持着良好的平衡&#xff0c;能够在插入和删除等操作后通过一系列旋转和重新着色操作来保持树的平衡。这种平衡性质使得红黑树在搜索、插入和删除等操作的平均和最坏情况下的时间复杂度都是O(log n)。以下是红黑树的一些关键特性…...

2-29算法习题总结

贪心问题 小A的糖果 题目描述 小 A 有 n n n 个糖果盒&#xff0c;第 i i i 个盒中有 a i a_i ai​ 颗糖果。 小 A 每次可以从其中一盒糖果中吃掉一颗&#xff0c;他想知道&#xff0c;要让任意两个相邻的盒子中糖的个数之和都不大于 x x x&#xff0c;至少得吃掉几颗糖…...

当Linux 磁盘满了,查看大文件并删除

当你的Linux磁盘空间满了时&#xff0c;可以通过以下步骤查找大文件并删除它们&#xff1a; 检查磁盘空间&#xff1a; 使用以下命令检查磁盘空间的使用情况&#xff1a; df -h这将显示文件系统的使用情况&#xff0c;包括每个文件系统的总大小、已用空间、可用空间和挂载点。 …...

STL -萃取特性迭代器

1. STL简单概述 a. STL六大组成部分 容器&#xff08;Container&#xff09;空间配置器&#xff08;allocator&#xff09;算法&#xff08;Algorithm&#xff09;迭代器&#xff08;Iterator&#xff09;仿函数&#xff08;Function object&#xff09;适配器&#xff08;Ad…...

python pandas写入csv

在Python的Pandas库中&#xff0c;可以使用to_csv方法将DataFrame对象写入CSV文件。以下是一个简单的示例&#xff1a; import pandas as pd# 创建一个DataFrame对象 data {Name: [Alice, Bob, Charlie, David],Age: [25, 30, 35, 40],City: [New York, Los Angeles, Chicago…...

oracle 数据库建集群式数据库的DBLINK的语法

根据需要修改以下红色字体的部分即可。 1、连接集群式数据库DBLINK语法 create public database link 自定义的dblink名字 connect to 连接对方数据库的用户名 identified by "密码" using (DESCRIPTION (ADDRESS_LIST (FAILOVER ON) (LOAD_BALANCE OFF) …...

基于JAVA的毕业设计分配选题系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 专业档案模块2.2 学生选题模块2.3 教师放题模块2.4 选题审核模块 三、系统展示四、核心代码4.1 查询专业4.2 新增专业4.3 选择课题4.4 取消选择课题4.5 审核课题 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…...

Android 接入指纹识别

接入指纹框架&#xff1a;https://github.com/Tencent/soter implementation com.github.Tencent.soter:soter-wrapper:2.0.91.Application中初始化 class IApplication : Application() {override fun onCreate() {super.onCreate()instance thisinitSort()}private fun in…...

如何通过代理IP安全使用Linkedln领英?

LinkedIn是跨境外贸必备的拓客工具&#xff0c;世界各地的许多专业人士都使用领英来作为发布和共享内容的主要工具&#xff0c;这使得它成为跨境出海必备的渠道工具。 但是不少做外贸的朋友都知道&#xff0c;领英账号很容易遭遇限制封禁&#xff0c;但如果善用工具&#xff0…...

嵌入式驱动学习第一周——定时器与延时函数

前言 这篇博客一起学习定时器&#xff0c;定时器是最常用到的功能之一&#xff0c;其最大的作用之一就是提供了延时函数。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&…...

Tips杂记

&#x1f972; &#x1f978; &#x1f90c; &#x1fac0; &#x1fac1; &#x1f977; &#x1f43b;‍❄️&#x1f9a4; &#x1fab6; &#x1f9ad; &#x1fab2; &#x1fab3; &#x1fab0; &#x1fab1; &#x1fab4; &#x1fad0; &#x1fad2; &#x1fad1…...

可以用numpy为for加速

Numpy除了用于科学计算&#xff0c;还有一个功能是可以代替某些for循环&#xff0c;进行同样的功能实现&#xff0c;有于是向量矩阵运算&#xff0c;碰到复杂的for时&#xff0c;计算速度可以提高&#xff0c;从而提高程序性能。以下是一些常用的NumPy函数和操作&#xff0c;可…...

cartographer ceres后端优化

这里引用一篇文章 https://zhuanlan.zhihu.com/p/567635409 因为cartographer中的代码有的地方添加了AddParameterBlock,有的地方没有添加,会引起歧义,原来AddParameterBlock可以隐式添加优化变量,这篇文章介绍了具体原因,核心内容如下: AddParameterBlock的作用作用一:…...

day57 集合 List Set Map

List实现类 List接口特点&#xff1a;元素有序 可重复 Arraylist 可变数组 jdk 8 以前Arraylist容量初始值10 jdk8 之后初始值为0&#xff0c;添加数据时&#xff0c;容量为10&#xff1b; ArrayList与Vector的区别&#xff1f; LinkList&#xff1a;双向链表 优点&#xff1…...

蓝桥杯:真题讲解3(C++版)附带解析

报纸页数 来自&#xff1a;2016年七届省赛大学C组真题&#xff08;共8道题) 分析&#xff1a; --画出报纸长的样子&#xff0c;如果我们在上面多画一张报纸&#xff0c;那么就符合题意的5&#xff0c;6&#xff0c;11&#xff0c;12。 观察这张图&#xff1a;观察3&#xf…...

继续预训练对大语言模型的影响

翻译自文章&#xff1a;Investigating Continual Pretraining in Large Language Models: Insights and Implications 摘要 本文研究了大型语言模型&#xff08;LLMs&#xff09;中不断学习&#xff08;CL&#xff09;的不断发展领域&#xff0c;重点是制定有效和可持续的训练…...

关于空频变换的知识点

1.DCT变换&#xff1a; 离散余弦变换是一种将图像从空域转换到频域的技术&#xff0c;它可以将图像分解为频域分量。对于RGB图像&#xff0c;它由红色&#xff08;R&#xff09;、绿色&#xff08;G&#xff09;和蓝色&#xff08;B&#xff09;三个通道组成。当应用DCT变换时…...

别再怕网关单点故障了!手把手教你用华为eNSP模拟器配置VRRP(含S3700交换机实战)

企业级网络高可用实战&#xff1a;VRRP协议深度解析与华为eNSP配置指南 当核心网关突然宕机&#xff0c;整个办公区的网络连接瞬间中断——这种场景对于网络管理员来说无异于噩梦。传统网络架构中&#xff0c;默认网关通常采用静态配置&#xff0c;一旦这台设备出现故障&#x…...

告别软件切换!保姆级教程:在通达信里直接调用扫雷宝网页版查财务风险

通达信深度整合指南&#xff1a;一键调取扫雷宝与高频工具实战 每次分析股票时&#xff0c;你是不是也厌倦了在通达信、浏览器和第三方工具之间反复切换&#xff1f;那种打断思路的割裂感&#xff0c;简直让人抓狂。作为一款老牌看盘软件&#xff0c;通达信其实隐藏着强大的自定…...

如何用智能KMS激活工具彻底告别Windows和Office激活烦恼

如何用智能KMS激活工具彻底告别Windows和Office激活烦恼 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为电脑上的Windows系统突然弹出"激活Windows"的水印而烦恼吗&#xff1f;…...

Anthropic论文登Nature:AI或通过数字、代码“传染”危险倾向,评估安全需查“族谱”

AI模型或通过数字、代码等“传染”危险倾向刚刚&#xff0c;Anthropic一篇论文登上Nature&#xff0c;曝出一个让整个AI安全圈坐不住的发现&#xff1a;一个「坏」模型随手写的一串数字&#xff0c;就能「带坏」下一个模型&#xff0c;而且根本看不出这串数字哪里有问题。这篇论…...

如何用Retrieval-based-Voice-Conversion-WebUI在10分钟内打造专属AI语音模型

如何用Retrieval-based-Voice-Conversion-WebUI在10分钟内打造专属AI语音模型 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Vo…...

BetterNCM插件管理器:三步搞定网易云音乐终极增强方案

BetterNCM插件管理器&#xff1a;三步搞定网易云音乐终极增强方案 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否觉得网易云音乐PC版功能太过基础&#xff1f;想要更多个性化设…...

Tomcat后台权限详解与实战:从manager-gui到JMX,不同角色如何影响你的安全防线

Tomcat后台权限深度解析&#xff1a;从角色配置到安全加固实战指南 1. Tomcat权限模型的核心架构 在Apache Tomcat的权限体系中&#xff0c;/conf/tomcat-users.xml文件扮演着神经中枢的角色。这个看似简单的XML配置文件实际上定义了整个容器的访问控制矩阵。与常见的RBAC&am…...

腾讯开源 | 蒸馏结合可学习缓存:腾讯混元视频生成加速新探索

来自腾讯混元的全新AIGC视频生成加速方案--(Distillation-CompatibleLearnableFeatureCaching)DisCa正式开源&#xff0c;作为学界和业界首次对基于可学习的特征缓存技术进一步加速蒸馏后少步模型的这一方向的尝试&#xff0c;该工作现已被CVPR2026接收。TL;DR速览:DisCa主要聚…...

从零构建ROS机器人行为树:Groot可视化调试实战指南

1. 为什么需要行为树与Groot&#xff1f; 想象一下你在指挥一支机器人小队执行巡逻任务。如果只用传统代码写逻辑&#xff0c;可能会变成一堆复杂的if-else嵌套&#xff0c;就像用文字描述"如果看到敌人就攻击&#xff0c;否则检查A点&#xff0c;如果距离A点小于0.5米就…...

想在瑞芯微RK3588上跑视频分类模型?避开3D卷积这个坑,试试这几种NPU友好的方案

瑞芯微RK3588视频分类模型部署实战&#xff1a;3D卷积替代方案与性能优化 在嵌入式AI领域&#xff0c;瑞芯微RK3588凭借其强大的NPU加速能力成为众多开发者的首选平台。然而当我们将目光投向视频理解任务时&#xff0c;一个关键问题浮出水面&#xff1a;如何在不支持原生3D卷积…...