树形DP的经典运用
树形DP一般用于一些树形结构的题目而且是算法竞赛中比较喜欢考察的一个知识点。树形DP入门例题1AcWing 285.没有上司的舞会这题非常简单可称之为树形DP的入门题。显然一个节点有两种状态选参加或不选不参加。那么不妨设fu,1表示节点u被选后u节点及其子树可获得的最大权值fu,0表示节点u不被选的情况下u节点及其子树可获得的最大权值。那么很容易可以推出fu,1fson,0wu其中son表示u的所有子节点。fu,0max(fson,1,fson,0)。那么这个DP顺序显然要按照dfs的顺序来按深度遍历而且要用递归的方式先求出子节点的状态。所以代码就很容易写了#includeiostreamusingnamespacestd;constintN6005;inth[N],f[N][2];inthead[N],to[N],ne[N],idx;boolhfa[N];voidadd(intx,inty){ne[idx]head[x];to[idx]y;head[x]idx;}voiddfs(intu){f[u][1]h[u];for(intihead[u];i;ine[i]){intjto[i];dfs(j);f[u][0]max(f[j][0],f[j][1]);f[u][1]f[j][0];}}intmain(){intn;cinn;for(inti1;in;i)cinh[i];for(inti1;in;i){inta,b;cinab;hfa[a]true;add(b,a);}introot1;while(hfa[root])root;//寻找根节点dfs(root);coutmax(f[root][1],f[root][0]);}例题2洛谷P2899注意读题题干中提到“N头牛N-1个相邻关系”所以必然是树形结构又问最值那么考虑采用树形dp。问题实际上等效于染色一个节点染色后其父节点与子节点也会被染色。那么考虑每个节点的染色或被染色情况分类讨论设自身染色状态为0被父节点染色为1不被父节点染色也不自己染色只能被子节点染色为2。考虑节点u(设其子节点为v父节点为fa)f[u][0]min(f[v][0],f[v][1],f[v][2])1f[u][1]min(f[v][0],f[v][2])注意u为根节点时很特殊由于没有父亲必须要再多加1f[u][2]较难处理先把所有的子节点染色考虑对f[v][2]-f[v][0]排序有负数直接加上相当于取消染色但是不能一直加至少要留一个自己染色的节点碰到非负数直接退出循环即可。最后答案即为min(f[1][0~2])背包类树形DP例题1AcWing 286.选课这题与上一题略有不同这题限定了学生选课的数量刚好为m。所以这题还需要将选课数量也作为状态的一个维度。那么不妨设fx,t表示在以x为根节点的子树中包括x选恰好t门课可获得的最大学分。特别地当t0时x的子树中没有可选的课故fx,00当t0时设Son(x)为x的子节点集合则fx,t∑i1pfyi,ci\sum_{i1}^{p} f_{y_{i},c_{i}}∑i1p​fyi​,ci​​scorex其中yi∈\in∈Son(x)且∑i1pcit−1\sum_{i1}^{p} c_{i}t-1∑i1p​ci​t−1。那么这个式子的形式很像之前线性DP中讲到的分组背包DP。我们不妨这样理解一共有p个组每个组里有若干个物品物品的编号为yi体积为ci权值为fyi,ci背包的体积是t-1且每个组里最多挑一个物品。这样思路就很明朗了代码如下#includeiostreamusingnamespacestd;constintN305;inthead[N],to[N],ne[N],w[N],idx;intf[N][N];intn,m;voidadd(intx,inty){ne[idx]head[x];to[idx]y;head[x]idx;}voiddfs(intu){for(intihead[u];i;ine[i]){dfs(to[i]);for(intjm-1;j;j--){for(intk1;kj;k){f[u][j]max(f[u][j],f[u][j-k]f[to[i]][k]);//对数学方程的程序实现有一定的区别//由于此时的f[u][j-k]只经过了前面若干个子节点的更新所以可以直接计算}}}for(intim;i1;i--){//要补上前面选修课程i的学分f[u][i]f[u][i-1]w[u];}}intmain(){cinnm;for(inti1;in;i){intx;cinxw[i];add(x,i);}m;dfs(0);coutf[0][m]endl;return0;}二次扫描与换根法例题1:AcWing 287.积蓄程度这个题目中给的树是一个无根树需要对根进行枚举但显然O(n2)的复杂度无法接受所以我们引入了二次扫描与换根法先考虑以任意一个点为根节点去求答案将得到的答案记为Droot。那么这个时候我们就要考虑怎么求出任意的Fi即以i为根节点的总流量这个时候考虑对于任意一个节点x的子节点y假设我们此时已经求出了Fx那么应该如何导出Fy呢其实很简单直接看蓝书P294就懂了总结二次扫描与换根法的精髓在于先由下到上做一遍dfs求出Droot然后利用D数组由上到下再做一遍dfs求出Fi

相关新闻

第二:Jmeter - 环境搭建

第二:Jmeter - 环境搭建

一.JMeter介绍 1.JMeter是JAVA桌面应用程序,用于测试客户端/服务端结构的软件1.1.JMeter用来测试静态和动态资源的性能1.2.JMeter用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体性能2.JMeter帮助应用程序进行回归测试&…

2026/5/17 8:52:38 阅读更多 →
android scrollview嵌套webview,滚动冲突解决

android scrollview嵌套webview,滚动冲突解决

ConsecutiveScrollerLayout是Android下支持多个滑动布局(RecyclerView、ViewPager、WebView、ScrollView等)和普通控件(TextView、ImageView、LinearLayou、自定义View等)持续连贯滑动的容器,它使所有的子View像一个整体一样连续顺畅滑动。 ConsecutiveScrollerLayout支持多种…

2026/7/7 5:04:48 阅读更多 →
NViST 运行笔记

NViST 运行笔记

文章标题: NViST: In the Wild New View Synthesis from a Single Image with Transformers 1. 环境配置 创建环境 conda create -n nvist python3.9 进入环境 conda activate nvist 安装torch、torchvision、torchaudio pip install torch2.1.2 torchvision…

2026/5/17 8:52:38 阅读更多 →

最新新闻

远程协助软件推荐 远程协助软件哪个好

远程协助软件推荐 远程协助软件哪个好

日常帮亲友排查设备故障、异地处理工作难题,都需要靠谱的远程协助,便捷高效的远程协助能大幅降低跨设备、跨地域的操作成本。哪款远程协助软件体验比较呢?无界趣连2.0凭借轻量化设计与扎实的使用体验,成为个人日常远程协助的优选工…

2026/7/7 4:55:49 阅读更多 →
AD15 敷铜(Polygon Pour) 的完整操作,按步骤做即可,适合顶层/底层GND或电源敷铜。

AD15 敷铜(Polygon Pour) 的完整操作,按步骤做即可,适合顶层/底层GND或电源敷铜。

一、准备工作- 确保 板框(Board Shape) 已画好(机械层 Mechanical 1)。​- 布局、走线基本完成,DRC 先过一遍。​- 切换到要敷铜的层:底部层标签点 Top Layer(顶层) 或 Bottom Layer…

2026/7/7 4:55:49 阅读更多 →
NET 10:Oxigraph 的 FFI 桥接实践

NET 10:Oxigraph 的 FFI 桥接实践

架构概览┌──────────────────────────────────────────────────────────┐ │ .NET 应用层 │ │ ┌──────────┐ ┌────────────────…

2026/7/7 4:55:49 阅读更多 →
从静态限流到智能负载管理:Uber 如何治理大规模数据库过载

从静态限流到智能负载管理:Uber 如何治理大规模数据库过载

本文是对 How Uber Conquered Database Overload: The Journey from Static Rate-Limiting to Intelligent Load Management 的整理与翻译。 内容结构概览 本文会围绕 Uber 如何从静态限流走向智能负载管理展开,主要包括: 为什么 Uber 的数据库过载治理…

2026/7/7 4:47:48 阅读更多 →
Uber 如何用原生 gRPC 加速 OpenSearch:从 REST/JSON 瓶颈到搜索与写入性能优化

Uber 如何用原生 gRPC 加速 OpenSearch:从 REST/JSON 瓶颈到搜索与写入性能优化

本文是对 Accelerating Search and Inestion with High-Performance gRPC™ in OpenSearch™ 的整理与翻译。 内容结构概览 本文会围绕 Uber 如何在 OpenSearch 中引入原生 gRPC 传输层展开,主要包括: 为什么搜索系统在 Uber 几乎无处不在REST/JSON 在…

2026/7/7 4:47:48 阅读更多 →
CRM管理系统有哪些?2026年高性价比选型指南

CRM管理系统有哪些?2026年高性价比选型指南

很多企业在挑选 CRM 时,习惯先看每家的报价单,比完单价比折扣,最后选一个 "看起来最便宜" 的方案。但我们接触过的大量真实案例显示:约 60% 的企业在 CRM 上线后的第三年,实际支出会超出最初预算的 40% 以上…

2026/7/7 4:45:48 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻