【树】HNOI2014 米特运输
题目大意
洛谷链接
给出一课点带权的树,修改一些点的权值使该树满足:
- 同一个父亲的儿子权值必须相同
- 父亲的取值必须是所有儿子权值之和
输入格式
第一行是一个正整数\(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 米特运输的更多相关文章
- BZOJ_3573_[Hnoi2014]米特运输_树形DP+hash
BZOJ_3573_[Hnoi2014]米特运输_树形DP+hash 题意: 给你一棵树每个点有一个权值,要求修改最少的权值,使得每个节点的权值等于其儿子的权值和且儿子的权值都相等. 分析: 首先我们 ...
- 洛谷 P3237 [HNOI2014]米特运输 解题报告
P3237 [HNOI2014]米特运输 题目描述 米特是\(D\)星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. \(D\)星上有 ...
- bzoj 3573: [Hnoi2014]米特运输
3573: [Hnoi2014]米特运输 Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. D星 ...
- 【bzoj3573】[HNOI2014]米特运输
题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城 ...
- 3573: [Hnoi2014]米特运输 - BZOJ
Description米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. D星上有N个城市,我们将其顺序编号为1到N,1号 ...
- BZOJ3573:[HNOI2014]米特运输(树形DP)
Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储 存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市 ...
- 【bzoj3573】[HNOI2014]米特运输 树形dp
题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城 ...
- BZOJ3573: [Hnoi2014]米特运输(树上乱搞)
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1669 Solved: 1031[Submit][Status][Discuss] Descript ...
- [luogu3237 HNOI2014] 米特运输 (树形dp)
传送门 Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. D星上有N个城市,我们将其顺序编号为1到N, ...
随机推荐
- vue3剖析:响应式原理——effect
响应式原理 源码目录:https://github.com/vuejs/vue-next/tree/master/packages/reactivity 模块 ref: reactive: compu ...
- 如何使用JSTL获取并显示数据
首先在×××controller里查询数据,并绑定,代码如下: /** * 显示所有租借信息 默认进入这个方法 * * @param resp * @param req * @param manage ...
- Spring IoC 到底是什么
前言 「上一篇文章」我们对 Spring 有了初步的认识,而 Spring 全家桶中几乎所有组件都是依赖于 IoC 的. 刚开始听到 IoC,会觉得特别高大上,但其实掰开了很简单. 跟着我的脚步,一文 ...
- oracle之三rman 不完全恢复
rman 不完全恢复 9.1 rman 不完全恢复的三个标准模式:基于time.基于scn和基于sequence: 范例1:恢复过去某个时间点误操作,一般使用基于time或scn. 1)环境:有一套全 ...
- Mybatis注解开发案例(入门)
1.创建maven工程,配置pom.xml 文件. 2.创建实体类 3.创建dao接口 4.创建主配置文件SqlMapConfig.xml 5.在SqlMapConfig.xml中导入外部配置文件jd ...
- H5C3综合案例
案例:实现步骤 1. 搭建HTML结构 <section> <div></div> <div></div> <div></ ...
- 文档驱动 —— 表单组件(五):基于Ant Design Vue 的表单控件的demo,再也不需要写代码了。
源码 https://github.com/naturefwvue/nf-vue3-ant 特点 只需要更改meta,既可以切换表单 可以统一修改样式,统一升级,以最小的代价,应对UI的升级.切换,应 ...
- 熟悉ifos项目的记录吧
1.首页关联的:在 default-navigation-model.xml里 2.输入框改成下拉列框 第一步,找到需要修改的view的包,新建一个view obj 第二步,在query里写上需要找的 ...
- java对象相等
https://www.dutycode.com/post-140.html 简单来首,Object方法里的equals也是直接判断两个引用是否指向同一个地址,即引用同一个对象 public bool ...
- Java8学习小记
转载自https://segmentfault.com/a/1190000006985405 2014年,Oracle发布了Java8新版本.对于Java来说,这显然是一个具有里程碑意义的版本.尤其是 ...