题目大意

洛谷链接

给出一课点带权的树,修改一些点的权值使该树满足:

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

输入格式

第一行是一个正整数\(N\),表示节点的数目。

接下来\(N\)行,每行一个正整数,其中的第\(i\)行表示第\(i\)个节点的权值。

再接下来是\(N-1\)行,每行两个正整数\(a,b\)表示\(a,b\)之间有路径(\(a≠b\))。

数据范围

\(N<500000,A[j]<10^8\)

输出格式

输出一个整数表示最少需要修改的点的数目。

样例输入

5

5

4

3

2

1

1 2

1 3

2 4

2 5

样例输出

3

样例解释

一个最优解是将\(A[1]\)改成8,\(A[3]\)改成4,\(A[5]\)改成2。

思路

只要确定了一个点的值就可以知道整棵树的值了。

将路径上权值的累乘即为\(f[i]\),\(f[i]\)相同的表示他们同属于同一种合法方案,最后排序寻找相同最多的即可。

所有权值累乘会超\(long\ long\),这里学到的就是运用\(log\)转为加法,可以不开高精度。

用\(log\)就肯定要开浮点数,本题似乎没有精度问题,不过设个极小值判断一下也是可以的。

\(log(a×b)=log(a)+log(b)\)

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=500000+10;
vector<int> edge[maxn];//用vector存下边,比较好写
ll n,cnt=1,ans=1;
double a[maxn],f[maxn]; void add(int x,int y) {
edge[x].push_back(y);
} void dfs(int rt,double sum) {
f[rt]=sum+log((double)a[rt]);
for(int i=0; i<edge[rt].size(); i++) {
int Next=edge[rt][i];
dfs(Next,sum+log((double)edge[rt].size()));
}
} int main() {
scanf("%lld",&n);
for(int i=1; i<=n; i++)
scanf("%lf",&a[i]); for(int i=1; i<n; i++) {
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
}
dfs(1,log(1.0)); sort(f+1,f+n+1); for(int i=2; i<=n; i++)
if(f[i]-f[i-1]<=1e-8) {
cnt++;
ans=max(ans,cnt);
} else cnt=1;
printf("%lld\n",n-ans);
return 0;
}

【树】HNOI2014 米特运输的更多相关文章

  1. BZOJ_3573_[Hnoi2014]米特运输_树形DP+hash

    BZOJ_3573_[Hnoi2014]米特运输_树形DP+hash 题意: 给你一棵树每个点有一个权值,要求修改最少的权值,使得每个节点的权值等于其儿子的权值和且儿子的权值都相等. 分析: 首先我们 ...

  2. 洛谷 P3237 [HNOI2014]米特运输 解题报告

    P3237 [HNOI2014]米特运输 题目描述 米特是\(D\)星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. \(D\)星上有 ...

  3. bzoj 3573: [Hnoi2014]米特运输

    3573: [Hnoi2014]米特运输 Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.    D星 ...

  4. 【bzoj3573】[HNOI2014]米特运输

    题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城 ...

  5. 3573: [Hnoi2014]米特运输 - BZOJ

    Description米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.    D星上有N个城市,我们将其顺序编号为1到N,1号 ...

  6. BZOJ3573:[HNOI2014]米特运输(树形DP)

    Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储 存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市 ...

  7. 【bzoj3573】[HNOI2014]米特运输 树形dp

    题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城 ...

  8. BZOJ3573: [Hnoi2014]米特运输(树上乱搞)

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1669  Solved: 1031[Submit][Status][Discuss] Descript ...

  9. [luogu3237 HNOI2014] 米特运输 (树形dp)

    传送门 Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. D星上有N个城市,我们将其顺序编号为1到N, ...

随机推荐

  1. HTML模仿实现京东登录页面

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 面经手册 · 第10篇《扫盲java.util.Collections工具包,学习排序、二分、洗牌、旋转算法》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 算法是数据结构的灵魂! 好的算法搭配上合适的数据结构,可以让代码功能大大的提升效率. ...

  3. PHP对象传值 - 引用传值

    对象传值本质上是引用传值,将一个对象变量($a)赋值给另个变量($b),实际上是将$a存储的对象内存引用地址赋值$b,此时两个变量指向的就是一个对象.其中一个变量发送改变,另一个也会跟着改变.和引用变 ...

  4. Ubuntu查看并修改主机名的方法

    1 查看主机名 在Ubuntu系统中,快速查看主机名有多种方法: 在终端窗口中,主机名通常位于@符号后:root@lzyws739307453:~#例如这个的主机名就是lzyws739307453. ...

  5. vmware启动winodws时报错弹出【无法连接MKS:套接字连接尝试次数太多;正在放弃;】

    启动虚拟机时报错 解决办法:(其实就是有关于虚拟机的服务没有起) win+R输入services.msc,将所有有关vmware的服务都起起来即可

  6. 学习 | iscroll之上拉加载下拉刷新

    引入文件顺序 1.zepto 2.iscroll.js 3.scroll-probe.js 链接 完整代码:https://github.com/dirkhe1051931999/writeBlog/ ...

  7. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(6)

    前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx–技术流ken>,<Git+Gitlab+An ...

  8. defer 延迟调用

    1. 延迟调用 defer 的用法很简单,只要在后面跟一个函数的调用,就能实现将这个  xxx 函数的调用延迟到当前函数执行完后再执行. defer xxx()   这是一个很简单的例子,可以很快帮助 ...

  9. APS定时任务框架

    一.安装与简介 1.安装 pip install apscheduler 官方文档:https://apscheduler.readthedocs.io/en/latest/# 2.简介 APSche ...

  10. Docker:一、开始部署第一个Asp.net应用

    工具: docker desktop :一个使用Docker的IDE工具,可以理解为SourceTree,也是使用git的一个桌面化工具: kitematic :配合desctop,用来管理本地的镜像 ...