P3574 题解 | 贪心,树形 dp

news/2025/10/7 12:55:10/文章来源:https://www.cnblogs.com/lajishift/p/19128333

传送门

题意

给出一颗树,根为 1 号节点,点有点权 \(a\),求从根出发一条遍历每条边恰好两次的路径,使得以下式子最小:

\(t_i\) 为第一次到达一个点时走过的路径条数,特别地 \(t_1 = 2 \times n - 2\)(最后回到 1)

\[\min _ {i = 1} ^ n \left ( t_i + a_i \right ) \]

思路

显然是树形 dp,记 \(f_u\)\(u\) 子树内的最小值答案,\(g_u\) 走整个子树一遍后回到 \(u\) 的距离。

\[\begin{align*} f_u &\leftarrow \max \left ( f_u, f_v + g_u + 1 \right ) \\ g_u &\leftarrow g_u + g_v + 2 \end{align*} \]

每遍历一个儿子都执行上述转移。
每次执行时,第一个式子里的 \(g_u\) 表示遍历 \(v\) 以前的所有儿子走一遍再回到 \(u\) 的代价,\(+1\) 则是到 \(v\) 的代价。

于是关键在于遍历儿子的顺序,考虑贪心。考虑通过调整法来推导出最优解的性质。

如,两个儿子 \(v_1, v_2\)。调整前遍历 \(v_1\) 后遍历 \(v_2\)

那么从 \(v_1,v_2\) 都没遍历向都遍历的转移为:

\[f_u \leftarrow \max \left( f_u, g_u + 1 + \max \left( f_{v_1} , g_{v_1} + 2 + f_{v_2}\right)\right) \]

若交换 \(v_1, v_2\)

\[f_u \leftarrow \max \left( f_u, g_u + 1 + \max \left( f_{v_2} , g_{v_2} + 2 + f_{v_1}\right)\right) \]

那么 \(v_1\)\(v_2\) 前面优于 \(v_2\)\(v_1\) 前面(不交换优于交换)的条件为:

\[\max \left( f_{v_1}, g_{v_1} + 2 + f_{v_2}\right) \lt \max \left( f_{v_2}, g_{v_2} + 2 + f_{v_1}\right) \]

注意到:\(g_{v_1} + 2 + f_{v_2} \gt f_{v_2}\),所以,若满足条件,右侧必须是第二个值成为 \(\max\),即:

\[\max \left( f_{v_1}, g_{v_1} + 2 + f_{v_2}\right) \lt g_{v_2} + 2 + f_{v_1} \]

\(f_{v_1} \lt g_{v_2} + 2 + f_{v_1}\) 恒成立,则有用的只有:

\[g_{v_1} + 2 + f_{v_2} \lt g_{v_2} + 2 + f_{v_1} \]

移项得:

\[g_{v_1} - f_{v_1} \lt g_{v_2} - f_{v_2} \]

于是每个 \(u\),将儿子按照 \(g_{v} - f_v\) 从小到大排序,然后转移即可。

代码:

link

const int N = 1e6 + 5;
int n;
int a[N];
vector<int> e[N];
int f[N], g[N];
void dfs(int u, int fa){if(u != 1) f[u] = a[u];vector<int> vec;for(int v : e[u]){if(v == fa) continue;dfs(v, u);vec.push_back(v);}sort(vec.begin(), vec.end(), [](int v1, int v2){return g[v1] - f[v1] < g[v2] - f[v2];});for(int v : vec){chkmx(f[u], g[u] + f[v] + 1);g[u] += g[v] + 2;}
}
void solve_test_case(){n = read();rep(i, 1, n){a[i] = read();}rep(i, 1, n - 1){int u = read(), v = read();e[u].push_back(v);e[v].push_back(u);}dfs(1, 0);write(max(f[1], g[1] + a[1]));
}

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

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

相关文章

注册账号自建网站高端建筑铝型材

unittest是python自带的单元测试框架&#xff0c;它封装好了一些校验返回的结果方法和一些用例执行前的初始化操作&#xff0c;使得单元测试易于开展&#xff0c;因为它的易用性&#xff0c;很多同学也拿它来做功能测试和接口测试&#xff0c;只需简单开发一些功能&#xff08;…

怎么创建公司的个人网站ps做的网站

在实现播放器的时候&#xff0c;我们需要捕获键盘、鼠标事件进行视频快进、快退&#xff0c;或者双击全屏/退出全屏窗口、鼠标右键弹出菜单栏。默认情况下&#xff0c;在使用libVLC库的时候&#xff0c;我们无法捕获这些事件&#xff0c;因为我们将Qt的视频窗口传递给了libVLC。…

简单工厂模式 - 实践

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

1.springmvc基础入门(一) - 详解

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

爱,在行动中生长,我们因爱而变得辽阔——《岛上书店》读后感

看完了《岛上书店》,合上书最想说的就是:这书真好看。不是那种需要正襟危坐才能读下去的“大作”,更像是在一个闲适的下午,听朋友娓娓道来一个发生在小岛上的,关于一群普通人如何因为书与爱而彼此牵连的故事。 全…

杭州做商务网站网站建设企业实践总结

Windows Server 2012学习 用windows系统来架构网络&#xff0c;以便将资源共享给网络上的用户。 windows的网络架构大致可以分为工作组&#xff08;workgroup&#xff09;架构&#xff0c;域&#xff08;domain&#xff09;架构与前两者的混合架构。 一、工作组架构为分布式…

做网站的流程视频教程网站开发设计课程

题目 读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10 ​100。 输出格式&#xff1a; 在一行内输出 n 的各位数字之和…

东营免费建网站幼儿活动设计方案模板

一、关于效率和适用范围 尽管官方承诺Json格式字段采用了空间换时间的策略&#xff0c;比Text类型来存储Json有大幅度的效率提升。但是Json格式的处理过程仍然效率不及传统关系表&#xff0c;所以什么时候用Json格式字段尤为重要。 只有我们确定系统已经能精确定位到某一行&am…

做一个网站 如何盈利制作网站源码软件

前言 最近在做项目过程中,我们注意到当考虑车体轮廓去进行全局路径规划(如混合A*算法),如果仅仅将障碍物点云数据中得每一个点只当成点,会造成较大的计算时间,如若将点云聚类成圆形 线型 多边形障碍物 会提高计算效率,这是其中一个原因,另一个原因是,我们需要知道障碍…

Ubuntu 下同名文件替换后编译链接到旧内容的现象分析 - 实践

Ubuntu 下同名文件替换后编译链接到旧内容的现象分析 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

Luogu P14007 「florr IO Round 1」查询游戏 题解 [ 蓝 ] [ 交互 ]

查询游戏 原题做法是显然的,子段绝对值最大值可以转化为求出前缀和序列的最大值、最小值,然后两者作差即可。查询操作可以转化为询问前缀和序列中两个元素比大小。因为查询数 \(2n\),所以各扫一遍用擂台法求最大、最…

RK3588和FPGA桥片之间IO电平信号概率性不能通信原因 - 实践

RK3588和FPGA桥片之间IO电平信号概率性不能通信原因 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consol…

稀缺计算资源如何塑造机器学习优化专家

本文讲述了机器学习专家如何在有限计算资源条件下发展优化技能,重点介绍了特征选择技术在高维空间中的应用,以及如何将这些技术应用于保护电商平台安全的实际场景中。稀缺计算资源如何塑造卡洛斯韦尔塔斯的职业生涯 …

医院建设网站意义电子商务网站首页设计

Project下要创建四个文件夹: bin(输出目录\工作目录) 、include(头文件目录) 、lib(动态库目录) 、src(源码目录) 一、主项目模块配置&#xff1a; 1.配置属性——>常规——>输出目录加入(..\..\bin\) 2.配置属性——>调试——>工作目录加入($(OutDir)) 备注&am…

优雅的合并GIT分支

优雅的合并GIT分支 目标 将dev​分支合并到main分支,并且不产生“合并提交”。具体操作确保本地 main 分支是最新的: bash git checkout main git pull origin main # 获取远程最新的main分支代码切换到 dev​ 分支…

实用指南:豆瓣图书评论数据分析与可视化

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

cpa广告联盟网站建设高端网站开发平台

文章目录 标准化与池化1. 标准化/归一化1.1 归一化归一化的作用 1.2 标准化批标准化方法 Batch Normailzation标准化方法的对比自动学习标准化方法 2. 池化2.1 池化的作用2.2 常见的池化方法2.3 池化方法的差异2.4 池化的必要性 标准化与池化 1. 标准化/归一化 1.1 归一化 归…

网站开发的核心技术上海装修公司招聘施工队长

概述 jQuery 是继 prototype 之后又一个优秀的 Javascript 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) &#xff0c;这是其它的 js 库所不及的&#xff0c;它兼容 CSS3&#xff0c;还兼容各种浏览器&#xff08;IE 6.0, FF 1.5, Safari 2.…

网站怎么做电脑系统下载wordpress文章表情插件

每个进程都有三个标准文件描述符&#xff1a;stdin&#xff08;标准输入&#xff09;、stdout&#xff08;标准输出&#xff09;和stderr&#xff08;标准错误&#xff09;。默认情况下&#xff0c;stderr会输出到终端。使用2>可以将stderr重定向到其他地方&#xff0c;比如…

广州市番禺区官网seo站群干什么的

题目 题目链接 分析 这道题目一定要多读几遍&#xff0c;才能理解。 大意就是你有钱budget 和 库存stock的金属零件&#xff0c;让你从一堆机器里面选择一种机器可以合成最多金属的数量是多少&#xff0c;这些机器合成金属需要的零件数目是不一样的&#xff0c;composition…