HNOI2014 米特运输

2024-01-23 03:36
文章标签 运输 米特 hnoi2014

本文主要是介绍HNOI2014 米特运输,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P3237 [HNOI2014] 米特运输

题目大意

有一棵有 n n n个节点的树,每个点有一个权值,要求修改一些点的权值,使得:

  • 同一个父亲节点的所有儿子节点的权值相同
  • 父亲节点的权值必须是所有儿子结点的权值之和

求需要修改的最小次数。

1 ≤ n ≤ 5 × 1 0 5 1\leq n\leq 5\times 10^5 1n5×105


题解

我们发现,当树上一个点的权值确定之后,树上所有的点的权值都可以确定。那么,对于每个点 i i i,我们可以求出当这个点的权值不修改时,根节点的权值 c i c_i ci

对于两个点 i i i j j j,如果 c i = = c j c_i==c_j ci==cj,则当根节点的权值取 c i c_i ci时,这两个点的权值都不需要修改。那么我们只需要给 c c c值排序,再求出最多有多少个 c i c_i ci的值相同。若最多有 k k k c i c_i ci的值相同,则答案为 n − k n-k nk

不过,我们发现 c i c_i ci的值可能很大,而求 c i c_i ci是点 i i i原来的权值乘上从点 i i i的父亲到根节点的每个点的儿子个数之积,所以我们可以用 l o g log log将乘法转化为加法,那么就不会出现 c i c_i ci存不下的情况。

时间复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn)

code

#include<bits/stdc++.h>
using namespace std;
const int N=500000;
const double eps=1e-8;
int n,tot=0,d[2*N+5],l[2*N+5],r[N+5],a[N+5],ct[N+5];
int now=0,ans=0;
double b[N+5];
void add(int xx,int yy){l[++tot]=r[xx];d[tot]=yy;r[xx]=tot;
}
void dfs(int u,int fa,double sum){b[u]+=sum;sum+=log(ct[u]-(u>1));for(int i=r[u];i;i=l[i]){if(d[i]==fa) continue;dfs(d[i],u,sum);}
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);b[i]=log(a[i]);}for(int i=1,x,y;i<n;i++){scanf("%d%d",&x,&y);add(x,y);add(y,x);++ct[x];++ct[y];}dfs(1,0,0);sort(b+1,b+n+1);for(int i=1;i<=n;i++){if(i>1&&fabs(b[i]-b[i-1])>eps){ans=max(ans,now);now=0;}++now;}ans=max(ans,now);ans=n-ans;printf("%d",ans);return 0;
}

这篇关于HNOI2014 米特运输的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635119

相关文章

计算机网络(运输层)

运输层概述 概念 进程之间的通信 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到三层(到网络层)的功能。 进程之间通信流程 以体系结构的角度来看

设计模式之禅5:迪米特法则

https://www.cnblogs.com/zh7791/p/7922960.html 定义: 一个对象应该对其他对象保持最少的了解。 问题由来: 类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。 解决方案: 尽量降低类与类之间的耦合。   PS:   自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。 无论是面向过程编程还

首发!《物流运输行业电子签最佳实践案例集》重磅发布

近日,法大大重磅发布《物流运输行业电子签最佳实践案例集》,旨在分享在物流行业深耕近10年的经验,为物流企业提供基于电子签技术的数字化创新参考。 该案例集精选中原大易、G7易流、河北快运、万联易达、浙江新颜物流、内蒙古多蒙德、天津小铁马和吉泰物流等物流企业为典型代表,呈现企业利用电子签名和数字化技术优化业务流程、提升服务质量、增强竞争力的成功案例,涵盖了从合同签署、货物追踪到供应链管理等多个方面的

助力航运管理数字智能化,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建江面河道运输场景下来往航行船只自动检测识别系统

在全球化浪潮的推动下,物流行业作为连接世界的桥梁,其快速发展与进化不仅重塑了国际贸易的格局,更深刻影响着全球贸易金融的进程。其中,海运作为大宗商品跨国、全球化贸易的支柱性运输方式,其重要性不言而喻。随着各国对航海运输的重视日益加深,构建世界级一流的海运队伍与港口设施已成为共同的目标。然而,传统的海运管理模式往往受限于工业化思维的束缚,缺乏数字化、智能化的技术支撑,难以适应快速变化的市场需求与竞争态

设计模式 -- 七大原则(六)-- 迪米特法则

1 基本介绍 一个对象应该对其他对象保持最少的了解 类与类关系越密切,耦合度越大 迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的 public 方法,不对外泄露任何信息 迪米特法则还有个更简单的定义:只与直接的朋友通信,其中“朋友”包括当前对象本身、

AW303 运输小猫

题目地址 易错点: 笔者由于没有进行数据初始化(排序以及数据填充)和状态转移中的一个字母r写成了l而调试了近一个小时. #include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#define ll long longusing namespace std;const ll INF=0x

如何用Java SpringBoot实现G县乡村生活垃圾治理运输地图?

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、Python、微信小程序、大数据实战项目集 ⚡⚡文末获取源码 文章目录 ⚡⚡文末获取源码G县乡村生活垃圾治理运输地图系统-研究背景G县乡村生活垃

油气界的“透视眼”!红外热像仪在油气储存及管道运输方面的应用

油气储存设施和管道由于老化、腐蚀、操作不当或自然灾害等原因,可能会发生泄漏,油气一旦遇到火源或高温环境,很容易引发火灾或爆炸。 红外热像仪在油气储存及管道运输方面的应用,具有显著的优势和重要性。它能够实时监测设施的运行状态,直观定位故障点,提高检测效率,预防事故的发生,从而确保油气储存和管道运输的安全与稳定。 油气储罐监测 储罐作为石化企业不可或缺的核心设施,承载着大量甲、乙类危险性

【计算机网络】[第五章:运输层][自用]

1 运输层概述 (1)概述: (2) 2 端口号、复用、分用的概念 (1) (2)不同的应用报文在传输层封装为TCP报文段,则叫做TCP复用;UDP复用同理;而UDP复用所得用户数据报和TCP复用得到的TCP报文段,在网络层都要使用IP协议封装成IP数据报,这叫做IP复用。         IP数据报首部中,协议字段的值,用来表明IP数据报数据载荷部分,封装的是何种数据单元。 (3)

计算机网络:运输层 - TCP 流量控制 拥塞控制

计算机网络:运输层 - TCP 流量控制 & 拥塞控制 滑动窗口流量控制拥塞控制慢开始算法拥塞避免算法快重传算法快恢复算法 滑动窗口 如图所示: 在TCP首部中有一个窗口字段,该字段就基于滑动窗口来辅助流量控制和拥塞控制。所以我们先讲解滑动窗口。 首先,发送方会维护一个发送缓存: 应用程序会把想要发送的数据写入到发送缓存中,而在发送缓存内部,维护一个发送窗口