备战蓝桥杯---树形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://xiahunao.cn/news/2812762.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

终于,我们拿下了硅谷的那个 Linear

就像设计领域的 Figma&#xff0c;文档领域的 Notion&#xff0c;Linear 同样在软件开发管理领域推出了革命性的工具。而且以其名字 Linear Style 命名的设计风格&#xff0c;也成为了一股软件设计潮流。 Linear 于 2019 年在美国 &#x1f1fa;&#x1f1f8; 旧金山创立。目前…

echarts在线样式

makeapie echarts社区图表可视化案例makeapie echarts图表可视化案例, 分享你的可视化作品https://www.makeapie.cn/echarts

数据库orclec;nvl和nvl2的区别

Oracle中nvl()与nvl2()函数详解-CSDN博客 select nvl(null,2) as vb from dual select nvl2(666,2,3) as vb from dual

AI与大数据:智慧城市安全的护航者与变革引擎

一、引言 在数字化浪潮的席卷下&#xff0c;智慧城市正成为现代城市发展的新方向。作为城市的神经系统&#xff0c;AI与大数据的融合与应用为城市的安全与应急响应带来了革命性的变革。它们如同城市的“智慧之眼”和“聪明之脑”&#xff0c;不仅为城市管理者提供了强大的决策…

LeetCode 刷题 [C++] 第73题.矩阵置零

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 题目分析 题目中要求使用原地算法&#xff1a;即直接在输入矩阵上进行修改。因此如果在输入矩阵上把行/列的值修改成0后&#xff0c;在…

《数据治理简易速速上手小册》第4章 数据安全与合规性(2024 最新版)

文章目录 4.1 数据安全的基本原则4.1.1 基础知识4.1.2 重点案例&#xff1a;在线零售商的数据加密4.1.3 拓展案例 1&#xff1a;医疗机构的访问控制4.1.4 拓展案例 2&#xff1a;金融服务提供商的数据备份和恢复 4.2 遵循数据合规性的策略4.2.1 基础知识4.2.2 重点案例&#xf…

SwiftUI- DatePicker的集成

在SwiftUI中&#xff0c;DatePicker是用于显示和选择日期的视图&#xff0c;可以通过以下步骤集成DatePicker&#xff1a; 1.创建一个日期变量来存储选定的日期&#xff1a; State private var selectedDate Date()2.在视图中使用DatePicker&#xff0c;并将其绑定到先前创建…

机器学习-02-机器学习算法分类以及在各行各业的应用

总结 本系列是机器学习课程的第02篇&#xff0c;主要介绍机器学习算法分类以及在各行各业的应用 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 定义问题&#xff08;Problem Definition&#xff09; -> 数据收集(Data Collection) -> 数据分割(Data…

docker容器配置mysql5.7主从复制

介绍 本文将通过docker创建3个mysql数据库容器&#xff0c;实现数据库主从复制功能&#xff0c;三个数据库容器分别为主库mysql-master:3307&#xff0c;从库mysql-slave-01:3308&#xff0c;mysql-slave-02:3309。使用的是mysql5.7版本 1. 拉取mongo镜像 docker pull mysql…

React Hooks概述及常用的React Hooks介绍

Hook可以让你在不编写class的情况下使用state以及其他React特性 useState ● useState就是一个Hook ● 通过在函数组件里调用它来给组件添加一些内部state,React会在重复渲染时保留这个state 纯函数组件没有状态&#xff0c;useState()用于设置和使用组件的状态属性。语法如下…

【QT+QGIS跨平台编译】之五十二:【QGIS_CORE跨平台编译】—【qgsexpressionlexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

微信公众号关键词自动回复

今天主要给大家讲一下如何实现微信公众号关键词的自动回复功能&#xff0c;就如网站的文章而言&#xff0c;进行人机识别&#xff0c;需要关注公众号回复验证码获取到验证码从而展示文章内容&#xff0c;&#xff0c;具体效果如下图。 springboot 2.3.2RELEASE 1、微信公众平台…

跨境电商必读:如何选择适合跨境ERP系统?

在当今全球化的商业环境下&#xff0c;跨境电商已经成为许多企业拓展业务的重要途径。而选择适合的ERP系统&#xff0c;对于实现跨境电商的高效运营和持续发展至关重要。本文将为您详细介绍如何选择适合跨境电商的ERP系统&#xff0c;助您在激烈的市场竞争中脱颖而出。 为什么…

2024.2.25 模拟实现 RabbitMQ —— 网络通信设计(服务器)

目录 引言 约定应用层的通信协议 自定义应用层协议 Type Length PayLod 实现 Broker Server 类 属性 与 构造 启动 Broker Server 停止 Broker Server 处理客户端连接 读取请求 与 写回响应 根据请求计算响应 清除 channel 引言 生产者 和 消费者 都是客户端&…

决策支持系统(DSS):一文读懂,同时分清和BI的区别

大家好&#xff0c;我是贝格前端工场&#xff0c;本期继续分享决策支持系统的设计&#xff0c;欢迎大家关注&#xff0c;如有B端系统界面的设计和前端需求&#xff0c;可以联络我们。 一、什么是DSS DSS系统是指决策支持系统&#xff08;Decision Support System&#xff09;…

2024年1月京东洗衣机行业数据分析:TOP10品牌销量销额排行榜

鲸参谋监测的京东平台1月份洗衣机市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台显示&#xff0c;今年1月份&#xff0c;京东平台上洗衣机的销量约160万件&#xff0c;环比上个月增长约42%&#xff0c;同比去年下滑7%&#xff1b;销售额约28亿元&#xff0c;环比…

ETH网络中的账户

ETH网络中的账户 Externally owned accounts (EOA) - 外部账户 由用户控制&#xff0c;我们导入助记词创建的账户就属于此类账户。 Contract accounts (smart contracts) - 合约账户 合约账户由以太坊虚拟机执行的代码控制。它也被称为智能合约。合约帐户有相关的代码和数据存…

Qt介绍以及qt_creater的安装和C++项目工程创建

最近天气严寒&#xff0c;同学们要注意保暖哦&#xff01;学习的同时别忘了照顾好自己呀&#xff01;o(*&#xffe3;▽&#xffe3;*)ブ 目录 一、Qt 1、Qt概念 2、常见的GUI 二、安装qt_creater 方法一&#xff1a; 方法二&#xff1a; 三、Qt_creater 中C项目的创建 …

企业微信主体怎么转让给别人?

企业微信变更主体有什么作用&#xff1f;当我们的企业因为各种原因需要注销或已经注销&#xff0c;或者运营变更等情况&#xff0c;企业微信无法继续使用原主体继续使用时&#xff0c;可以申请企业主体变更&#xff0c;变更为新的主体。企业微信变更主体的条件有哪些&#xff1…

超真诚婚礼邀请函小程序

结婚了&#xff0c;自己写个婚礼邀请函小程序&#xff0c;含泪省下&#xffe5;49.9&#xff1b;程序员的浪漫&#xff01; 1、定位直达 2、背景音乐 3、倒计时 4、CSDN图床 页面代码如下&#xff1a; <cu-custom bgColor"bg-yellow-light" isBack"{{fal…