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

我们先来看几个比较简单的例子来引入:

我们令f[i]表示以i为根节点的子树大小,易得状态转移方程为:

f[i]=1+f[son1]+....+f[soni];

我们用DFS即可,下面是大致的模板:

让我们来看看几道题吧:

1.贪心+树形DP+DFS:

对于叶子节点,它要多少就弄多少,然后我们再分析它的父亲节点,假如它的子树还缺,那么就选其子树上最小的值即可。

因此,我们维护好每一个子树的min,然后再DFS一下各个子树所需的数量即可。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;int n,t[100010],head[100010],cnt,p,root,min1[100010];
long long sum=0,c[100010];
struct node{int dian,next;
}edge[100010];
void merge(int x,int y){edge[++cnt].dian=y;edge[cnt].next=head[x];head[x]=cnt;
}
int dfsmin(int root){if(head[root]==-1){min1[root]=t[root];return t[root];}min1[root]=t[root];for(int i=head[root];i!=-1;i=edge[i].next){min1[root]=min(dfsmin(edge[i].dian),min1[root]);}return min1[root];
}
long long dfssum(int root){if(head[root]==-1){sum+=c[root]*min1[root];return c[root];}long long ckck=0;for(int i=head[root];i!=-1;i=edge[i].next){ckck+=dfssum(edge[i].dian);}if(ckck<c[root]){sum+=(c[root]-ckck)*min1[root];ckck=c[root];}return ckck;
}
int main(){memset(head,-1,sizeof(head));cin>>n;for(int i=1;i<=n;i++){scanf("%d%d%d",&p,&c[i],&t[i]);if(p==-1){root=i;continue;}merge(p,i);}dfsmin(root);dfssum(root);cout<<sum;
} 

接题:

我们要求的即为一个点,当他删去后要让形成的树中节点最多的尽量小。

我们考虑一个点删去,它的儿子形成树,它的父亲节点以上也形成了树。

于是,我们令f[i]为删去i后最大联通快的大小,

f[i]=max(tot[k],n-tot[i]),tot为树的大小,用树形dp维护即可。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,head[1010],x,y,cnt,sum[1010],inc[1010],root,f[1010];
struct node{int dian,next;
}edge[1005];
void merge(int x,int y){edge[++cnt].dian=y;edge[cnt].next=head[x];head[x]=cnt;
}
int dfssum(int root){if(head[root]==-1){return sum[root]=1;}sum[root]=1;for(int i=head[root];i!=-1;i=edge[i].next){sum[root]+=dfssum(edge[i].dian);}return sum[root];
}
int main(){cin>>n;memset(head,-1,sizeof(head));for(int i=1;i<=n-1;i++){cin>>x>>y;merge(x,y);inc[y]++;}for(int i=1;i<=n;i++){if(inc[i]==0){root=i;break;}}dfssum(root);int ans=1000000,ans1,jj;for(int i=1;i<=n;i++){int ckck=-1;for(int j=head[i];j!=-1;j=edge[j].next){ckck=max(ckck,sum[edge[j].dian]);}ans1=max(ckck,n-sum[i]);if(ans1<ans){ans=ans1;jj=i;}}cout<<jj<<" "<<ans;
}

接题:

我们令f[i][0]表示i节点不选时它和它的子树快乐最大指数,f[i][1]表示i节点选时它和它的子树快乐最大指数,因此,我们得到状态转移方程为:

f[i][0]=\summax(f[j][0],f[j][1])

f[i][1]=hi+\sum f[j][0]

f[ri][0]=0,f[ri][1]=hri(ri为叶子节点)

结果就是max(f[root][0],f[root][1]).

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,head[6010],cnt,inc[6010],x,y,root,dp[6010][2],h[6010],pos[6010][2];
struct node{int dian,next;
}edge[6010];
void merge(int x,int y){edge[++cnt].dian=y;edge[cnt].next=head[x];head[x]=cnt;
}
int dfs(int root,int k){if(pos[root][k]==1) return dp[root][k];if(k==1){dp[root][k]=h[root];for(int i=head[root];i!=-1;i=edge[i].next){dp[root][k]+=dfs(edge[i].dian,0);}}else{for(int i=head[root];i!=-1;i=edge[i].next){dp[root][k]+=max(dfs(edge[i].dian,0),dfs(edge[i].dian,1));}}pos[root][k]=1;return dp[root][k];
}
int main(){memset(head,-1,sizeof(head));cin>>n;for(int i=1;i<=n;i++) cin>>h[i];for(int i=1;i<=n-1;i++){cin>>x>>y;merge(y,x);inc[x]++;}cin>>x>>y;for(int i=1;i<=n;i++){if(inc[i]==0){root=i;break;}}int jj=dfs(root,1);int gg=dfs(root,0);cout<<max(jj,gg);
}

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

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

相关文章

MapGIS农业信息化解决方案(1)

当前,信息化发展水平已经成为衡量一个国家和地区现代化水平和综合实力的重要标志。推进农业信息化,成为正在经历由传统向现代转型的中国农业必须跨越的门槛。连续多年,中央 1 号文件均提出“农业信息化建设”的目标,提出“整合资源,共建平台,健全农村信息服务体系”;在《…

提升Java IO性能!深入掌握FilterOutputStream类!

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java IO相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

FX110网:2024年1月六大机构货币现货交易量数据出炉

2024年1月&#xff0c;各主要平台的机构货币现货交易量呈半升半降态势&#xff0c;但降幅超过涨幅&#xff0c;六大交易场所的现货日均货币交易量&#xff08;ADV&#xff09;平均环比为-1.42%。其中&#xff0c;Cboe FX、360T和Saxo Bank环比下跌&#xff1b;Euronext FX、FxS…

计算机网络---物理层疑难点总结

疑难点 1&#xff0e;传输媒体是物理层吗?传输媒体和物理层的主要区别是什么? 传输媒体并不是物理层。由于传输媒体在物理层的下面&#xff0c;而物理层是体系结构的第一层&#xff0c;因此有时称传输媒体为0层。在传输媒体中传输的是信号&#xff0c;但传输媒体并不知道所传…

MySQL中的describe关键字

背景 新建mysql表中需要一个描述的字段&#xff0c;本人就是用的describe&#xff0c;结果mybatis插入报错&#xff0c;去掉这个字段后结果正常 结果 检查代码后&#xff0c;认为代码正常&#xff0c;并且字段编写正确&#xff0c;类型也正确&#xff0c;怀疑是数据库这边的…

2024龙年特别篇 -- 魔法指针 之 二级指针 指针数组

哈喽哈喽&#xff0c;它来咯&#xff0c;它来咯&#xff0c;接下来有白子寰给你讲解:二级指针 指针数组 目录 二级指针 二级指针的介绍 一图 KO 二级指针 二级指针的运算 指针数组 概念 指针数组模拟二维数组 整形指针数组 二级指针 二级指针的介绍 在介绍时&#xff0…

如何使用word制作填空题?

填空题也是一种比较高效的复习方式&#xff0c;大脑记忆的本质就是不断地重复&#xff0c;电脑给了我们一些自己认为不可能的事情&#xff0c;创造了必要的条件。 第一步标注出自己要进行标注的文字 可以选用红色字体对其进行标注&#xff0c;后续的标注就采用F4&#xff08;…

网络安全与IP安全网络安全

网络安全与IP安全网络安全 网络安全 是指网络系统的硬件&#xff0c;软件以及系统中的数据收到的保护。 保护的基本属性为&#xff1a;机密性&#xff0c;身份认证&#xff0c;完整性和可用性&#xff1b; 基本特征&#xff1a;相对性&#xff0c;时效性&#xff0c;相关性…

如何操作系统缓冲区减少了磁盘碎片化?

如何操作系统缓冲区减少了磁盘碎片化&#xff1f; 在探讨操作系统如何通过使用缓冲区来减少磁盘碎片化之前&#xff0c;我们需要先了解什么是磁盘碎片化以及它为什么会对我们的电脑性能造成影响。 磁盘碎片化简介 磁盘碎片化发生在计算机硬盘上存储数据的过程中。简单来说&am…

正码,反码,补码,移码数据表示

数据表示 ◆带符号数有下列编码方式&#xff0c;当真值为-45时: 原码:一个数的正常二进制表示&#xff0c;最高位表示符号&#xff0c;数值 0 的源码有两种形式:0 (00000000&#xff09;和-0 (1 0000000) 。-45对应原码为10101101 反码:正数的反码即原码;负数的反码是在原码的基…

一文解读MES软件为企业带来的五大好处,附功能亮点及应用场景

在当今激烈竞争的市场环境下&#xff0c;企业需要不断提升自身的灵活性和适应能力&#xff0c;以更好地应对各种挑战和变化。而MES软件作为一种重要的信息化工具&#xff0c;可以帮助企业提升生产管理水平&#xff0c;提高效率&#xff0c;实现精细化管理&#xff0c;从而增强企…

Blender中四种不同的几何体类型(网格、曲线、体积和实例 )

网格、曲线、体积和实例是Blender中四种不同的几何体类型。它们各有特点&#xff0c;适用于不同的建模场景。 网格是由顶点、边和面组成的三维对象。它是Blender中最常用的几何体类型&#xff0c;可以用来创建各种模型&#xff0c;例如角色、场景、道具等。 曲线是一维对象&a…

jQuery引入及下载方法

jQuery引入及下载方法 目录 jQuery引入及下载方法【方法1】cdn引入【方法2】下载本地文件 【方法1】cdn引入 直接在head引入jq <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title>&…

【C++】7-12 样本方差

7-12 样本方差 分数 10 全屏浏览 切换布局 作者 ldm 单位 成都信息工程大学 作为概率论随便考100分的你&#xff0c;口算出给定样本的方差自然也不在话下&#xff0c;不过今天需要你编程实现这样的程序。 样本方差&#xff1a;S2n−11​∑i1n​(Xi​−Xˉ)2 样本均值&…

【BUG 记录】史诗级 BUG - MYSQL 删库删表却没有备份如何恢复数据

【BUG 记录】史诗级 BUG - MYSQL 删库删表却没有备份如何恢复数据 1. 问题描述2. 解决方案&#xff08;binlog&#xff09;2.1 构造测试环境2.2 查看 MySQL 环境是否开启 binlog2.3 查看所有的 binlog 日志记录2.4 查看当前正在使用的是哪一个 binlog 文件2.5 查看此时的 binlo…

好书推荐丨AI绘画全面精通:软件平台+脚本文案+设计制作+案例实战

文章目录 写在前面AI绘画推荐图书图书简介本书特色作者简介 推荐理由粉丝福利写在后面 写在前面 本期博主给大家带来了一本全新出版的AI绘画类书籍&#xff0c;《AI绘画全面精通&#xff1a;软件平台脚本文案设计制作案例实战》&#xff0c;对人工智能感兴趣的小伙伴快来看看吧…

etcd java 客户端jetcd库踩坑日志

问题 Q&#xff1a; EtcdException: Unable to resolve endpoints [http://0.0.0.0:2379/] A&#xff1a; 经过测试&#xff0c;endpoints最后的斜杠不能写&#xff0c;完整的endpoints是http://0.0.0.0:2379 Q&#xff1a; java.lang.NoSuchMethodError: io.netty.buffer.Po…

iOS高级理论:Runtime应用

一、遍历类的属性&#xff0c;快速归档 在 iOS 中&#xff0c;可以使用 Runtime 遍历类的属性来实现快速的归档&#xff08;Archiving&#xff09;操作。归档是将对象转换为数据流以便存储或传输的过程。下面是一个简单的示例&#xff0c;展示如何使用 Runtime 遍历类的属性进…

uniapp+express前后端小程序获取头像和昵称和code,openid,小程序授权登陆最新教程

目录 0总体思路0.1前端实现&#xff1a;0.2如何阻拦一些页面必须要登陆才能进去呢&#xff1f;0.3后端实现 1.首页2.个人中心页3.授权登陆页3.1.获取微信头像和微信昵称3.1.1官方教程3.1.2实际实现 3.2.获取头像和昵称之后去获取code小程序授权登陆3.3登陆页的整体代码&#xf…

聊聊spring-cloud-kubernetes-client-loadbalancer

序 本文主要研究一下spring-cloud-kubernetes-client-loadbalancer ServiceInstanceListSupplier org/springframework/cloud/loadbalancer/core/ServiceInstanceListSupplier.java public interface ServiceInstanceListSupplier extends Supplier<Flux<List<Ser…