Luogu P3237 [HNOI2014] 米特运输 题解 [ 蓝 ] [ 树形 DP ] [ 哈希 ]

news/2025/10/27 17:05:13/文章来源:https://www.cnblogs.com/zhr0102/p/19169586

米特运输

不是很难,但是思路很巧妙的一道题。

手模样例,观察合法方案的性质,容易发现,只要有一个节点权值是固定的,那么整棵树所有节点的权值便也固定了。

而由于每个节点之间是倍数关系,因此我们需要一个基本单位来表示倍数关系。为了方便,我们直接将权值的最大值,即根节点的权值设为基本单位,那么其余节点的系数一定形如 \(\dfrac{1}{k}\)

在得到每个节点的系数后,假设当前节点的权值为 \(x\),那么当 \(kx = a_{root}\) 的时候这两个节点的权值所对应的合法方案是一样的

由此可以想到记录每个节点的 \(k\) 值,然后乘上该点的原权值,丢进一个里,桶中最多的权值即为最终选择的权值。

因为 \(k\) 可能很大,因此需要采用哈希的思想存储。使用 map 实现桶,时间复杂度 \(O(n\log n)\)

#include <bits/stdc++.h>
#define fi first
#define se second
#define eb(x) emplace_back(x)
#define pb(x) push_back(x)
#define lc(x) (tr[x].ls)
#define rc(x) (tr[x].rs)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
using pi = pair<int, int>;
const int N = 500005;
const ll mod = 998442353;
int n;
ll a[N], b[N], ans;
map<ll, ll> tot;
vector<int> g[N];
void dfs(int u, int fa)
{if(u == 1) b[u] = 1;else if(fa == 1) b[u] = g[1].size();else b[u] = (b[fa] * (g[fa].size() - 1)) % mod;for(auto v : g[u]){if(v == fa) continue;dfs(v, u);}tot[(a[u] * b[u]) % mod]++;ans = max(ans, tot[(a[u] * b[u]) % mod]);
}
int main()
{//freopen("sample.in", "r", stdin);//freopen("sample.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;for(int i = 1; i <= n; i++) cin >> a[i];for(int i = 1; i < n; i++){int u, v;cin >> u >> v;g[u].push_back(v);g[v].push_back(u);}dfs(1, 0);cout << n - ans;return 0;
}

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

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

相关文章

「Gym 104901F」Say Hello to the Future

题目大意 给定一个序列,定义其权值为划分序列的方案数,使得划分出来的每个区间 \([l, r]\) 有 \(\max_{i = l}^r {a_i} \leq r - l + 1\) 。对于每个 \(1 \leq i \leq n\) 求只将 \(a_i\) 修改为 \(1\) ,序列的权值…

渐进过程中大O与小o混用

在数学中,大O符号(O)和小o符号(o)都用于描述函数的渐进行为,但它们的含义和强度不同。在实际使用中,需要注意它们的定义和适用场景,以避免误用。 \(O(x)\) 表示一个函数的渐进上界。具体来说,如果存在正常数C…

Navicat 17 超详细保姆级下载安装教程:附激活工具使用步骤​

这篇教程给你讲的Navicat 17安装方法,从下载到激活一步不落,中间碰到问题也能帮你解决,跟着做保准能装好。​这篇教程给你讲的Navicat 17安装方法,从下载到激活一步不落,中间碰到问题也能帮你解决,跟着做保准能装…

消息队列的有序性

RabbitMQ单一队列和单一消费者模式:确保一个队列只被一个消费者消费,这样可以保证消息按照发送的顺序被处理。因为队列本身就是一个先进先出的结构。 消息排序:在消息生产者端,为消息添加序列号和时间戳,消费者根…

【LTDC】DMA2D —— 嵌入式系统的 GPU

前言 ST 公司设计了一个专门用于图像处理的 DMA:DMA2D,可以之际通过 DMA2D 搬运或填充图像,而不经过 CPU,极大减轻了 CPU 的负担。为了学习 DMA2D,我也专门写了这篇文章,现在就让我们来看看吧! DMA2D 工作模式 …

各个版本的sqlite-jdbc jar下载链接

https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc

[电脑]win10下SVN图标不显示

[电脑]win10下SVN图标不显示转自 : https://blog.csdn.net/qq_43331089/article/details/128876896win10系统的SVN图标不现实了。正常情况下,会在文件夹上有一个对勾 但是对勾以及所有的SVN图标都突然消失了,都不知道…

2025/10/27~2025/11/2 做题笔记 - sb

2025/10/27 第一代图灵机 一样的套路,考虑每一个右端点对应的最左边可以到哪里,显然是最小的 \(j\) 使得 \(\max\limits_{j \le k \le i}pre_k = j - 1\)。考虑线段树维护一个区间内的最大的答案和最大的 \(pre_i\),…

echart - f

series: [{name: "直接访问",type: "bar",// 修改柱子宽度barWidth: "35%",data: [200, 300, 300, 900, 1500, 1200, 600],itemStyle: {// 修改柱子圆角barBorderRadius: 5}}]series中的…

完整教程:LinuxC++——etcd分布式键值存储系统入门

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

基于MATLAB的光学CCD全息成像仿真程序实现

基于MATLAB的光学CCD全息成像仿真程序实现一、流程 graph TD A[物光生成] --> B[参考光干涉] B --> C[全息图记录] C --> D[CCD光电转换] D --> E[电荷转移] E --> F[噪声注入] F --> G[信号重建]二…

el-date-picker样式修改

el-date-picker样式修改模板<el-col :span="12"><div class="detail-row flex-row"><span class="detail-label"><span style="color: red;margin-right: 4p…

我从哪里起飞 从哪里降落 多少不能原谅的错 却不能重来过

10.27 CF1988F Heartbeat P10440 [JOIST 2024] 环岛旅行 / Island Hopping P10439 [JOIST 2024] 逃生路线 2 / Escape Route 2

unity管理器设计:Manager of Managers

一、管理器Manager Manager管理器是对一类对象进行统一管理,像是UIManager,AudioManager,InputManager等。 UIManager对UI的生命周期进行统一管理,AudioManager对音频的播放进行统一管理,InputManager对玩家的输入…

iview table 排序 columns 里面写 sortable: custom 不要写 sortable: true 不然会进行二次内部排序序号等 字段。

iview table 排序 columns 里面写 sortable: custom 不要写 sortable: true 不然会进行二次内部排序序号等 字段。--------------------------------------------- 生活的意义就是你自己知道你要做什么,明确目标。没有…

决策不再凭感觉!Tita用数据驱动销售与交付的一体化协同

在当今激烈的市场竞争中,企业高层管理者们正面临一个普遍而棘手的难题:销售目标设定明确,但执行过程却总是脱节;客户信息散落在各个销售人员的Excel表和笔记本中,难以形成有效的客户洞察;销售过程缺乏透明化管控…

浅谈 Agent 开发工具链演进历程

模型带来了意识和自主性,但在输出结果的确定性和一致性上降低了。无论是基础大模型厂商,还是提供开发工具链和运行保障的厂家,本质都是希望提升输出的可靠性,只是不同的团队基因和行业判断,提供了不同的实现路径。…

为IvorySQL增添PACKAGE语法帮助

认识语法帮助 当使用psql工具登录数据库时,\h command可以查看语法帮助。比如查看create database语法: psql (17.6) Type "help" for help.ivorysql=# \h create database Command: CREATE DATABASE …

MATLAB 时间序列小波周期分析

1. 文件结构 WaveletPeriod/ ├── main_wavelet_period.m % 一键运行 ├── wavelet_power_spectrum.m % 小波功率谱 + 显著性 ├── period_peak_detect.m % 自动周期峰值 ├── plot_wavelet_results.m …

# 情绪日历应用(python AI项目)

📖 项目简介 这是一个基于人脸情绪识别的智能日历应用,能够:📅 记录你每天的情绪状态 😊 自动识别照片中的情绪 💬 提供情绪陪伴聊天 📊 统计月度情绪变化🏗️ 代码结构详解 1. 导入模块部分 - 程序的&q…