动态规划树形DP

news/2024/12/25 13:48:43/文章来源:https://www.cnblogs.com/Myyy-L/p/18628650

好东西,因为曾经在一次模拟赛的20分暴力中用到了,而我因为不会痛失20暴力分

树形DP

树形DP一般在一棵有根树上递归操作

嗯还是啥都不知道,上例题


【YbtOj】例题

A.树上求和

小小求和,拿捏

在从子节点转到父节点时,有着“二选一”的限制,所以设置状态时需要表示当前节点是否被选

于是乎,设状态 \(f_{x,opt}\) ,当 \(opt=0\) 时表示不选当前节点的最大和,反之则是选当前节点的最大和。于是乎就有转移方程

\[f_{x,0}=\Sigma\ max(f_{v,0},f_{v,1})\ ,f_{x,1}=\Sigma{f_{v,0}}+r_{x} \]

然后就做完了

#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=6e3+5;
int n,r[N];
vector <int> tr[N];
int d[N],root,f[N][2];void dfs(int x)
{int res1=0,res2=0;int _size=tr[x].size();for (int i=0;i<_size;i++){int v=tr[x][i];dfs(v);res1+=max(f[v][0],f[v][1]);res2+=f[v][0];}f[x][0]=res1,f[x][1]=r[x]+res2;
}
signed main()
{scanf("%lld",&n);for (int i=1;i<=n;i++) scanf("%lld",&r[i]);for (int i=1,u,v;i<n;i++){scanf("%lld%lld",&u,&v);tr[v].push_back(u);d[u]++;}for (int i=1;i<=n;i++) if (!d[i]) { root=i; break; }dfs(root);printf("%lld",max(f[root][0],f[root][1]));return 0;
}

B.结点覆盖

小小覆盖,拿捏

一个点被覆盖到只有三种情况:选它的子节点,选自己,选它的父节点。于是乎,状态 \(f_{x,pot}\)\(opt\) 分别代表上三种情况,然后对应的转移就行了

#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1505;
int n,k[N];
int d[N],root;
vector <int> tr[N];
int f[N][3];void dfs(int x)
{int res0=0,res1=0,res2=0;int _size=tr[x].size();for (int i=0;i<_size;i++){int v=tr[x][i];dfs(v);res0+=min(f[v][1],f[v][0]);res1+=min(f[v][0],min(f[v][1],f[v][2]));res2+=min(f[v][0],f[v][1]);}f[x][1]=res1+k[x],f[x][2]=res2;if (_size==0) return ;for (int i=0;i<_size;i++){int v=tr[x][i];f[x][0]=min(f[x][0],res0-min(f[v][0],f[v][1])+f[v][1]);} 
}
signed main()
{memset(f,0x3f,sizeof f);scanf("%lld",&n);for (int i=1,x,m;i<=n;i++){scanf("%lld",&x);scanf("%lld%lld",&k[x],&m);for (int j=1,v;j<=m;j++){scanf("%lld",&v);tr[x].push_back(v);d[v]++;}}for (int i=1;i<=n;i++) if (!d[i]) { root=i; break; }dfs(root);printf("%lld",min(f[root][0],f[root][1]));return 0;
}

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

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

相关文章

【工作相关】AOSP GSI image下载

android14 gsi下载地址: https://ci.android.com/builds/branches/aosp-android14-gsi/grid?legacy=1android13 gsi下载地址: https://ci.android.com/builds/branches/aosp-android13-gsi/grid?legacy=1

免费学习PostgreSQL,来这里看看PG从小白到专家技术公开课

PostgreSQL数据库是现在非常火的一种数据库技术,尤其是随着国内信创体系的建设,PostgreSQL由于其免费开源+功能强大等优点,在国内变得非常的热门,对于从事数据库相关职业的人员,学习下PostgreSQL技术非常有必要。 想免费学习PostgreSQL技术,可以观看CUUG数据库公开课有诸…

abb机械臂3HAC036260-001驱动器缺相维修

要判断ABB机器人3HAC036260-001驱动器是否存在缺相问题,可以通过以下几种方法:1、检查驱动器的状态指示灯:通常,驱动器会有状态指示灯来显示其工作状态。如果存在缺相问题,可能会有相应的指示灯亮起或闪烁,提示用户存在故障。2、使用专业的测试设备:例如,可以使用万用表…

页面返回的提示中,中文显示为乱码,如何解决?

问题: 页面返回的提示中,中文显示为乱码,如何解决? 答案: 您在访问网站时遇到中文乱码问题。建议您按照以下步骤解决:确认网站编码设置为UTF-8。 检查数据库编码设置,确保数据库编码为UTF-8。 确保HTML文件的编码设置为UTF-8。 检查服务器配置文件,确保字符集设置正确。 …

Nginx服务启动不成功的原因及解决方法?

Nginx服务启动不成功,可能的原因是什么?如何排查和解决? 答案: Nginx服务启动失败可能是由于服务器内部问题导致。建议您通过【云服务器】-【系统设置】-【异常现象排查】进行检查扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL…

为什么我的网站突然无法访问了?

网站无法访问的原因可能有很多,常见的原因包括服务器配置问题、文件权限设置不当、DNS解析异常等。为了帮助您快速解决问题,我们可以从以下几个方面进行排查:检查服务器状态:首先,请确认您的服务器是否正常运行。您可以尝试通过SSH或其他远程管理工具登录服务器,查看服务…

如何重置云服务器的登录账号密码?

如果您在设置新的账户密码后无法登录云服务器,可以按照以下步骤进行操作以重置为默认的初始账号密码:联系技术支持:首先,建议您立即联系云服务提供商的技术支持团队。通常,他们会有专门的流程来帮助用户重置密码。请提供您的账户信息、服务器详情以及任何相关的验证信息。…

部署SSL证书后,HTTPS下网站页面错位,如何解决?

在部署SSL证书后,发现HTTPS下的网站页面出现错位问题。以下是详细的解决方案:确认SSL证书部署:确认SSL证书已正确部署到所有子域名。检查资源加载方式:确认网站资源(如CSS、JS、图片等)是否通过HTTPS加载。混合内容(HTTP和HTTPS混合加载)可能导致页面错位。确保所有资源…

【Java开发】如何设计一个全局唯一的订单号?

一、背景介绍二、方案实践2.1 方案一:UUID2.2 方案二:数据库自增2.3 方案三:雪花算法2.4 方案四:分布式组件 总结一、背景介绍 在实际的软件系统开发过程中,由于业务的需要,我们经常需要生成业务单号,例如订单编号、入库单号、投诉服务单号等等,针对这个问题也做了一些…

极致 ElasticSearch 调优,让你的ES 狂飙100倍!

本文原文链接 文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 …

开源项目管理系统对比:10款最佳工具详评,助你决策

在当今数字化时代,项目管理的效率和效果直接关系到企业的竞争力和发展前景。开源项目管理系统因其灵活性、可定制性和成本效益,成为众多企业和团队的首选。从初创公司到大型企业,从软件开发团队到市场营销部门,合适的项目管理工具能够帮助团队更好地规划、执行和监控项目,…

java~重写hashcode时为什么要乘以31

在Java中,重写hashCode()方法时常常会使用31作为乘数,这是因为31具有一些独特的数学性质,使其成为一个优秀的选择。以下是几个原因: 1. 奇质数的特性 31是一个奇数和质数,这意味着它能有效地减少哈希冲突的概率。使用质数作为乘数可以帮助分散哈希值,从而提高哈希表的性能…