赛前训练 5 树形 dp

news/2025/10/6 16:17:46/文章来源:https://www.cnblogs.com/XOF-0-0/p/19127663

A

做树形 dp 时,尝试将题目转化为只考虑子树内.

对于这个题,因为起点到终点的路径总能拆成 起点 -> LCA -> 终点 的形式,所以我们考虑枚举 LCA 进行 dp.为了使汽油量最大,我们维护 \(dp_i\) 表示子树内跑到 \(i\) 的最大值,\(f_i\) 表示次大值.答案即为 \(\max\{dp_i+f_i+w_i\}\),转移是套路的.

实现
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <stdlib.h>
#include <vector>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define int long long
using namespace std;const int N=3e5+5;
int n,ans;
struct EDGE{int v,w;
};
vector<EDGE> G[N];
int w[N],dp[N],f[N];void dfs(int cur,int fa){for(auto i:G[cur]){if(i.v==fa)continue;dfs(i.v,cur);if(dp[i.v]-i.w+w[i.v]>dp[cur])f[cur]=dp[cur],dp[cur]=dp[i.v]-i.w+w[i.v];else if(dp[i.v]-i.w+w[i.v]>f[cur])f[cur]=dp[i.v]-i.w+w[i.v];}
}signed main(){ios::sync_with_stdio(0);cin.tie(0);cin>>n;for(int i=1;i<=n;i++)cin>>w[i];for(int i=1,u,v,w;i<n;i++){cin>>u>>v>>w;G[u].push_back({v,w});G[v].push_back({u,w});}dfs(1,0);int ans=-1e18;for(int i=1;i<=n;i++)ans=max(ans,dp[i]+f[i]+w[i]);cout<<ans;return 0;
}

B

这个题是讲过的,关于解法请查阅往期笔记.

错因:对于 dp 状态的定义太模糊.dp 题一定要在草稿纸上写出四要素.

C

两年前的这个时候打的月赛题,当时保龄了(现在估计也差不多).more and more vegetable,what should i do?

首先可以观察出来一些东西:

  • 必然先炸后连,不然有可能把刚连上的炸掉.

  • 由于是森林,最后一定需要 \(n-m-1\) 次操作来维持连通性.

有了上面两条结论,我们就只需要考虑炸的部分了.于是最优化问题很难不想到树形 dp.

分类讨论起手.不难发现,对于每个节点,只有三种情形:

  • 自我毁灭,出边全炸.

  • 保留一个孩子,自己作为链头/链尾.

  • 保留两个孩子,自己作为链的中间点.

自然地,令 \(dp_{i,0/1/2}\),表示节点 \(i\) 全炸/留一个/留两个的最少操作次数.

答案是所有连通块的 \(\min(dp_{root,0},dp_{root,1},dp_{root,2})\) 之和.

转移同样分类讨论:

  • 自我毁灭的情形,它必然还是得把那些炸掉的边连起来,炸的这一次也会付出 \(1\) 的代价,这部分是 \(deg_i+1\) 的;同时,它还需要考虑从子节点转移,子节点三种状态均可,只是如果子节点也是自我毁灭,那么它和父节点连的那条边就会重复算,需要减掉,这部分是 \(\min(dp_{son,0}-1,dp_{son,1},dp_{son,2})\) 的.两部分加起来就好.

  • 留一个的情形,显然我们需要儿子们全都炸了,所以先加上 \(\sum dp_{son,0}\).但我们还得留一个,所以得扣除一个 \(dp_{son,0}\),再加上 \(dp_{son,1}\).那么选哪个儿子最好呢?把后面两项合并为 \(-(dp_{son,0}-dp_{son,1})\),显然减号后面这一坨取 \(\max\) 的时候最优,简单维护即可.

  • 留两个的情形,从留一个出发,我们还得做一遍扣除再加上的操作,但不能和先前留的那一个重合,所以维护一个次大值就好.

于是转移方程就出来了:

iShot_2025-10-04_22.25.08

然后这题就做完了.本题轻微卡常,注意要开 LL.

实现
#include <bits/stdc++.h>
using namespace std;const int N=2e6+5;
int n,m;
int dp[N][3];
bool dfn[N];
vector<int> G[N];void dfs(int cur,int fa){dfn[cur]=1;int fir=0,sec=0;for(int i:G[cur]){if(dfn[i])continue;dfs(i,cur);if(dp[i][0]-dp[i][1]>fir)sec=fir,fir=dp[i][0]-dp[i][1];else if(dp[i][0]-dp[i][1]>sec)sec=dp[i][0]-dp[i][1];dp[cur][0]+=min({dp[i][0]-1,dp[i][1],dp[i][2]});dp[cur][1]+=dp[i][0];}dp[cur][0]+=G[cur].size()+1;dp[cur][1]-=fir;dp[cur][2]=dp[cur][1]-sec;
}signed main(){//freopen("traffic2.in","r",stdin);//freopen("traffic2.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cin>>n>>m;for(int i=1,u,v;i<=m;i++){cin>>u>>v;G[u].push_back(v);G[v].push_back(u);}int ans=0;for(int i=1;i<=n;i++)if(!dfn[i])dfs(i,0),ans+=min({dp[i][0],dp[i][1],dp[i][2]});cout<<ans+n-1-m;return 0;
}

D

待补......

总结

树形 dp:转化为子树内问题分类讨论设状态以及转移.

两个技巧点. 以上.

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

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

相关文章

新乡网站建设制作公司青岛谁家做网站

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到各种问题&#xff0c;在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍SpringCloud相关组件——nacos和sentinel的安装和配置&#xff0c;并分析了运行内存情况&#xff0c;此…

制作网站的素材wordpress登录

接上文~一、淘宝之前的大佬们是怎么试错的?我们看看在淘宝之前的大佬们是怎么试错迭代产品的。都知道飞机是莱特兄弟发明的&#xff0c;但很少有人知道为什么是他们。在内燃机发明后的很长一段时间内全球各地发明家都在投入研究飞机&#xff0c;莱特兄弟相对于其他竞争者&…

短网址网站建设兰州网络推广排行

9、电路综合-基于简化实频的任意幅频响应的微带电路设计 网络综合和简化实频理论学习概述中的1-8介绍了SRFT的一些基本概念和实验方法&#xff0c;终于走到了SRFT的究极用途&#xff0c;给定任意响应直接综合出微带电路。 1、任意幅频响应的微带电路设计用途 我们演示了采用…

建设网站遇到问题的解决方案.耐思尼克官方网站

在后台查询数据并在前台展示的场景中&#xff0c;当数据量较大时&#xff0c;页面加载会非常缓慢&#xff0c;此时建议使用后台分页查询的形式。在flask中&#xff0c;基于Flask-SQLAlchemy可以使用以下方式实现。 方法一&#xff1a; Flask-SQLAlchemy 提供了一个 paginate(…

完整教程:从虚拟化到云原生与Serverless

完整教程:从虚拟化到云原生与Serverlesspre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

怎么给网站做二维码全国企业信用公示系统查询

直接安装 pip install fvcore 会出现错误 解决办法 先这样安装 pip install --ignore-installed PyYAML然后安装 pip install fvcore

无痕检测是否注册iMessage服务,iMessages数据筛选,iMessage蓝号检测完美实现

无痕检测是否注册iMessage服务,iMessages数据筛选,iMessage蓝号检测完美实现一、实现iMessage蓝号数据筛选的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地…

递推求解逆元

\(a\cdot a^{-1}\equiv 1(\text{mod}\ p)\)。 我们要求 \(a^{-1}\)。 设 \(p = ma + n\),\(1 \leq n \leq p - 1\)。 所以 \(ma + n\equiv 0(\text{mod}\ p)\) 两边同时乘以 \(a^{-1}n^{-1}\)。 因此,\(a^{-1}\equiv…

一些做题记录(2025 2-3)

【MX-X9-T2】『GROI-R3』XOR 题目要求求区间异或和,先转化成前缀异或和。 从 \(0\) 到 \(n\) 的异或和是有规律的。 令 \(F(n)=0\oplus1\oplus\cdots\oplus n\),则有: \[F(n)=\begin{cases} n,&n\equiv 0\pmod4…

南昌网站建设加王道下拉物联网平台是干什么的用的

数据集制作单位&#xff1a;未来自主研究中心(FIRC) 数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1377 标注数量(xml文件个数)&#xff1a;1377 标注类别数&a…

网站是用什么做的吗做月季评分表的工程网站叫什么

前言Java通过垃圾回收机制&#xff0c;可以自动的管理内存&#xff0c;这对开发人员来说是多么美好的事啊。但垃圾回收器并不是万能的&#xff0c;它能够处理大部分场景下的内存清理、内存泄露以及内存优化。但它也并不是万能的。不然&#xff0c;我们在实践的过程中也不会出现…

龙泉做网站哪家好河南地区建设工程信息网

通过 jQuery&#xff0c;您可以选取&#xff08;查询&#xff0c;query&#xff09; HTML 元素&#xff0c;并对它们执行”操作”&#xff08;actions&#xff09;。 jQuery 语法 jQuery 语法是通过选取 HTML 元素&#xff0c;并对选取的元素执行某些操作。 基础语法&#x…

wordpress 架站东莞轻推网络公司

目录 前言 一.静态库 1.1生成静态库 1.2 库搜索路径 1.3 静态库优点 1.4 静态库缺点 二.动态库 2.1 生成动态库 2.2 使用动态库 2.3 运行动态库 2.4 动态库的优点 2.5 动态库的缺点 三.链接过程 四.如何创建和管理库 五.总结 前言 Linux系统中的库&#xff08;…

宁波网站排名优化seo湖北神润建设工程网站

大家好。今天总结一下系统架构设计的最后一部分知识点。 一、软件系统的质量属性 软件系统的质量属性 软件系统的质量属性可分为开发期质量属性和运行期质量属性2个部分。 1、开发期质量属性主要指在软件开发阶段所关注的质量属性&#xff0c;主要包含6个方面&#xff1a; …

智慧决策的透明化路径:“空白金兰契”架构下的“悟空备案制”研究

智慧决策的透明化路径:“空白金兰契”架构下的“悟空备案制”研究 引言:当AI开始做决策,我们如何信任它? 在智慧城市交通调度、医疗诊断、金融风控等领域,人工智能正越来越多地参与甚至主导关键决策。然而,当AI的…

完整教程:SAP学习笔记 - 开发22 - 前端Fiori开发 数据绑定(Jason),Data Types(数据类型)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:python可视化:端午假期旅游火爆原因分析

深入解析:python可视化:端午假期旅游火爆原因分析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

宁夏网站设计联系电话免费网站报价单怎么做

力扣每日刷题 一、704. 二分查找1.1、题目1.2、解题思路1.3、代码实现——C1.4、 总结&易错 二、27. 移除元素2.1&#xff1a;题目2.2、解题思路2.3、代码实现——C1.4、 总结&易错 一、704. 二分查找 1.1、题目 704. 二分查找 1.2、解题思路 题型&#xff1a;数组…

北京网站建设的服务公司找网站建设需要问什么软件

AI与Prompt&#xff1a;解锁软件开发团队的魔法咒语 写在最前面论文&#xff1a;基于ChatGPT的自协作代码生成将团队协作理论应用于代码生成的研究自协作框架原理1、DOL任务分配2、共享黑板协作3、Instance实例化 案例说明简单任务&#xff1a;基本操作&#xff0c;生成的结果1…

烟台市住房和城乡建设厅网站网络营销师证书怎么考

使用github action 拉取国外docker镜像 k8s部署经常用到国外镜像&#xff0c;如果本地无法拉取可以考虑使用github action环境 github action的ci服务器在国外&#xff0c;不受中国防火墙影响github action 自带docker命令运行时直接将你仓库代码拉取下来 步骤 你的国内dock…