Luogu P9128 [USACO23FEB] Fertilizing Pastures G 题解

news/2025/11/11 10:06:06/文章来源:https://www.cnblogs.com/Tsuukaku/p/19209199

Link

贪心好题。

考虑怎么计算时间,这是简单的:

  • \(T = 0\),相当于遍历整个树,每条边走 \(2\) 次去+回,时间为 \(2 \times (n - 1)\)
  • \(T = 1\),类似于上,但是有了一次选择一条从根到 \(x\) 的路径作为终点,路径上的边都只需要走一次,节省的时间为 \(dep_x\),显然我们要最大化节省的时间就要选一个深度最大的节点,此时时间为 \(2 \times (n - 1) - \max dep_x\)

怎么计算费用呢?费用取决于,到达每个节点的时间。遍历的顺序不同自然费用也不同。一个 key observation 是一旦进入某个子树,一定会走完再出来,如果不走完就出来,由于子树内的节点一直在生长,所以最优策略必定是对于每个节点我们都去决定其子节点的遍历顺序然后走完跳出来。

对于 \(T = 0\) 的讨论是经典的,对于节点 \(u\),记我们在遍历了若干节点之后已经花费了 \(ret\) 秒,记 \(siz(u), a(u), t(u), f(u)\) 分别表示 \(u\) 子树的大小,节点 \(u\) 的子树中 \(\sum_{i \in son_u} a_i\),遍历完 \(u\) 的子树并返回到 \(u\) 的时间,以及从 \(u\) 出发遍历完 \(u\) 的子树并返回 \(u\) 的最小费用。遍历子节点 \(v\) 时,\(v\) 子树已经增长了 \(ret\) 秒,遍历中花费 \(t(v)\) 秒,返回需要 \(2\) 秒,所以 \(f(u) \leftarrow f(u) + ret \times a_v + f(v)\) 之后更新 \(ret \leftarrow ret + t_v + 2\)。贪心排序过程使用邻项调整法,比较 \(x, y\)\(y, x\) 的差异,直接给出 \(cmp0\) 就是 \((t(u) + 2) \times a(v) \lt (t(v) + 2) \times a(u)\)。按照遍历顺序搜下去就可以了。

对于 \(T = 1\) 的讨论比较,麻烦的点在于那条不能返回的路径。贪心,选择一条从根到最深节点的链并定义为“主链”,特殊处理主链上的子树,其余的按照 \(T = 0\) 的情况处理。由此,定义 \(g(u)\) 表示从 \(u\) 出发并回到 \(u\) 内某一点而不返回到 \(u\) 的最小代价、\(f(u)\) 为从 \(u\) 出发,遍历子树同时必须返回到 \(u\) 的最小代价。我们需要维护最大深度以及候选为主链元素的节点。同样的,对于 \(cmp1\),我们使用邻项调整法,如果选择 \(u\) 为主链,\(v\) 需要返回,反之亦然。处理出主链元素之后单独 DP,其他的按照 \(T = 0\) 的情况处理即可。其实丢到搜索树上考虑类似于直接把要贪的主链元素丢到最后一个遍历的处理,我们做的就是尽可能将有着最长链的儿子往后推。

#include <bits/stdc++.h>#define int long longconstexpr int N = 2e5 + 7;int n, T, o;
int tim[N], siz[N], a[N], f[N];
int dep[N], mxd[N], g[N];std::vector<int> adj[N], cdi[N];bool cmp0(int x, int y) {return (tim[x] + 2) * a[y] < (tim[y] + 2) * a[x];
}bool cmp1(int x, int y) {return (tim[x] + 2) * a[y] + g[x] + f[y] < (tim[y] + 2) * a[x] + g[y] + f[x];
}void dfs0(int x) {siz[x] = 1; f[x] = a[x];for (int y : adj[x]) {dfs0(y);siz[x] += siz[y];a[x] += a[y];}tim[x] = 2 * (siz[x] - 1);std::sort(adj[x].begin(), adj[x].end(), cmp0);int res = 1;if (x == 1)res = 0;for (int y : adj[x]) {f[x] = f[x] + res * a[y] + f[y];res += tim[y] + 2;}
}void cal(int x) {mxd[x] = dep[x];for (int y : adj[x]) {dep[y] = dep[x] + 1;cal(y);mxd[x] = std::max(mxd[x], mxd[y]);}
}void dfs1(int x) {siz[x] = 1; f[x] = g[x] = a[x];for (int y : adj[x]) {dfs1(y);siz[x] += siz[y];a[x] += a[y];}tim[x] = 2 * (siz[x] - 1);for (int y : adj[x]) {if (mxd[y] == mxd[1])cdi[x].push_back(y);}std::sort(cdi[x].begin(), cdi[x].end(), cmp1);o = 0;if (cdi[x].size())o = cdi[x].back();std::vector<int> vec;for (int y : adj[x])if (y != o) vec.push_back(y);std::sort(vec.begin(), vec.end(), cmp0);int res = 1;if (x == 1)res = 0;for (int y : vec) {f[x] = f[x] + res * a[y] + g[y];res += tim[y] + 2;}if (o) f[x] = f[x] + res * a[o] + f[o];res = 1;if (x == 1)res = 0;std::sort(adj[x].begin(), adj[x].end(), cmp0);for (int y : adj[x]) {g[x] += res * a[y] + g[y];res += tim[y] + 2;}
}signed main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cin >> n >> T;for (int i = 2; i <= n; i++) {int x; std::cin >> x >> a[i];adj[x].push_back(i);}if (T == 0) {dfs0(1);std::cout << 2 * n - 2 << " " << f[1];} else {cal(1);std::cout << 2 * n - 2 - mxd[1] << " ";dfs1(1);std::cout << f[1];}return 0;
}

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

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

相关文章

Docker核心概念:镜像、容器、仓库的本质与关联

本文介绍了Docker的三个核心概念:镜像(Image)、容器(Container)和仓库(Repository)。镜像作为只读模板,容器是镜像的运行实例,仓库则用于存储和分发镜像。通过"获取并运行Nginx"的案例,展示了三者…

【知识分享】怎么建立受控的内外网文件传输通道?

要实现内外网文件传输并不难,很多工具和技术手段可以做到,但是如何才能建立受控的内外网文件传输通道呢?“受控”又包含哪些核心要素呢?一、什么样的内外网文件传输通道才叫受控的? 受控,就是要对内外网之间的文…

什么是文件摆渡系统?数据跨网“桥梁”与安全“卫士”!

在企业数字化办公场景中,“文件摆渡”是解决不同网络环境(如内网与外网、生产网与办公网、涉密网与非涉密网)间文件安全交换的核心需求。什么是文件摆渡系统?简单来说,它是一套通过技术手段构建 “受控数据通道”…

OpenCL shader

在OpenCL框架中,内核(Kernel)是明确的计算核心,而“shader”(着色器)本质属于图形API(如OpenGL/DirectX)的渲染单元。二者分属不同框架,但在跨API协同场景中存在功能关联与硬件资源复用,具体解析如下: 我们…

详解 “增益”:从基础概念到电子测量应用

在电子技术领域,增益是衡量系统放大能力的核心参数,定义为输出与输入信号的比值。无论是探头、放大器还是示波器,增益的设计与控制直接决定信号的可观测性和测量精度。 一、基础定义:比值与物理意义 增益(通常用A…

2025年大理石花岗岩生产厂家权威推荐榜单:天然石材/花岗岩/天然大理石源头厂家精选

市场格局日渐清晰,优质品牌以其稳定性能和卓越工艺赢得市场认可。 在建筑与装饰行业持续发展的推动下,大理石和花岗岩市场需求稳步增长。根据中国石材协会2024年行业报告数据,中国石材市场规模预计未来将保持稳定增…

2025年克拉玛依壁挂炉公司权威推荐榜单:威能壁挂炉/万家乐壁挂炉/天然气壁挂炉服务商精选

在采暖设备领域,壁挂炉作为家庭和商业场所的核心供暖设备,其性能优劣与安装服务的专业性直接关系到用户的取暖体验与能源消耗。本文将基于企业资质、技术实力、服务体系、市场口碑等多维度数据,为您解析克拉玛依地区…

springboot集成qq邮箱发送邮件

引入依赖: <!-- JavaMail API --> <dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.6.2</version> </dependency…

R方分数

R-squared 分数(R Score),也称为决定系数(Coefficient of Determination)或简称R方,是回归分析中用来评估模型拟合优度的一个重要统计指标。它衡量了因变量(Y)的变异中可以被自变量(X)解释的比例。简单来说,…

银河麒麟KylinV10操作系统清理操作系统中的缓存drop_caches

1#释放缓存的方法:然来是因为服务进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,原来是因为drop_caches的默认参数设置的就是不释放的 drop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释…

CentOS安装JAVA环境

1、下载安装包 访问Oracle官网:https://www.oracle.com/cn/java/technologies/downloads/#java25 这里以下载JDK25为例,如果需要下载JDK1.8等其他版本,也可以往下滑选择下载对应的版本即可。 2、解压安装包tar -xzv…

转载,也要有转载的道德吧

我的这篇文章 https://www.cnblogs.com/91program/p/19186389 刚发布没多久,发现被转载到 51CTO,但是没有任何转载的说明、且修改我博客的内容。https://blog.51cto.com/u_16099273/14302590

第11周 预习、实验与作业:流与文件

第11周 预习、实验与作业:流与文件第11周 预习、实验与作业:流与文件 目录第11周 预习、实验与作业:流与文件0.任务完成说明1. 预习1.1 学习目标1.2 预习任务1.3 课前问题列表2.实验3.课后任务(作业)3.1 课后复习…

2025年机场无障碍盲道砖生产厂家权威推荐榜单:火车站盲道砖/圆点盲道砖/高铁站盲道砖源头厂家精选

在无障碍环境建设日益受到重视的今天,盲道砖作为视障人士出行的重要保障,其产品质量与性能直接关系到公共设施的安全性与实用性。特别是在人流量大、使用频率高的机场、火车站、高铁站等交通枢纽,对盲道砖的性能要求…

C语言知识库 -- 完整C语言笔记目录,并且附带纯C项目源码《小鹅说 C 语言》

1、思维导图 2、完整笔记截图 3、项目源码截图 猜数字游戏 迷宫游戏(双人) 贪吃蛇游戏(单人/双1、思维导图2、完整笔记截图3、项目源码截图猜数字游戏迷宫游戏(双人)贪吃蛇游戏(单人/双人)俄罗斯方块1俄罗斯方块…

如何一键检测并修改公众号文章的错字和敏感词?

不知道你有没有过这种经历——公众号文章好不容易写完了,反复检查几遍觉得没问题,结果一发出去,立马就发现有个错别字,或者不小心用了个敏感词。真的特别影响编辑体验。 我之前也总为这个头疼,后来发现了一个特别…

Day34(4)-F:\硕士阶段\Java\课程资料\2025最新版JavaWeb+AI\资料\02. 前端Web基础(JS+Vue+Ajax)\资料\03. 基础代码\JS-Vue-01~12

JavaScriptJS-引入方式JS-基础语法数据类型JS-数据类型JS-函数JS-函数//3.JSON - JS对象标记法 let person ={ name: itcast, age: 18, gender:男 } alert(JSON.stringify(person));//js对象-->字符串 //{"nam…

Linux内核进程管理子系统有什么第六十六回 —— 进程主结构详解(62) - 实践

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

HTML 01 【基础语法学习】 - 详解

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

2025年衡水出租救护车公司权威推荐榜单:长途救护车出租/跨省救护车出租/市内救护车出租服务公司精选

在医疗服务和患者转运领域,专业可靠的救护车租赁服务已成为医疗体系的重要补充。随着非急救医疗护送需求的日益增长,衡水地区的救护车租赁市场也呈现出专业化、规范化的发展趋势。本文将基于企业资质、服务范围、车辆…