题目描述

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

D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都。这N个城市由N-1条单向高速通道连接起来,构成一棵以1号城市(首部)为根的树,高速通道的方向由树中的儿子指向父亲。树按深度分层:根结点深度为0,属于第1层;根结点的子节点深度为1,属于第2层;依此类推,深度为i的结点属于第i+l层。

建好高速通道之后,D星人开始考虑如何具体地储存和传输米特资源。由于发展程度不同,每个城市储存米特的能力不尽相同,其中第i个城市建有一个容量为A[i]的米特储存器。这个米特储存器除了具有储存的功能,还具有自动收集米特的能力。

如果到了晚上六点,有某个储存器处于未满的状态,它就会自动收集大气中蕴含的米特能源,在早上六点之前就能收集满;但是,只有在储存器完全空的状态下启动自动收集程序才是安全的,未满而又非空时启动可能有安全隐患。

早上六点到七点间,根节点城市(1号城市)会将其储存器里的米特消耗殆尽。根节点不会自动搜集米特,它只接受子节点传输来的米特。

早上七点,城市之间启动米特传输过程,传输过程逐层递进:先是第2层节点城市向第1层(根节点城市,即1号城市)传输,直到第1层的储存器满或第2层的储存器全为空;然后是第3层向第2层传输,直到对于第2层的每个节点,其储存器满或其予节点(位于第3层)的储存器全为空;依此类推,直到最后一层传输完成。传输过程一定会在晚上六点前完成。

由于技术原因,运输方案需要满足以下条件:

(1)不能让某个储存器到了晚上六点传输结束时还处于非空但又未满的状态,这个时候储存器仍然会启动自动收集米特的程序,而给已经储存有米特的储存器启动收集程序可能导致危险,也就是说要让储存器到了晚上六点时要么空要么满;

(2)关于首都——即1号城市的特殊情况, 每天早上六点到七点间1号城市中的米特储存器里的米特会自动被消耗殆尽,即运输方案不需要考虑首都的米特怎么运走;

(3)除了1号城市,每个节点必须在其子节点城市向它运输米特之前将这座城市的米特储存器中原本存有的米特全部运出去给父节点,不允许储存器中残存的米特与外来的米特发生混合;

(4)运向某一个城市的若干个来源的米特数量必须完全相同,不然,这些来源不同的米特按不同比例混合之后可能发生危险。

现在D星人已经建立好高速通道,每个城市也有了一定储存容量的米特储存器。为了满足上面的限制条件,可能需要重建一些城市中的米特储存器。你可以,也只能,将某一座城市(包括首都)中屎来存在的米特储存器摧毁,再新建一座任意容量的新的米特储存器,其容量可以是小数(在输入数据中,储存器原始容量是正整数,但重建后可以是小数),不能是负数或零,使得需要被重建的米特储存器的数目尽量少。

输入输出格式

输入格式:

第一行是一个正整数N,表示城市的数目。 接下来N行,每行一个正整数,其中的第i行表示第i个城市原来存在的米特储存器的容量。 再接下来是N-I行,每行两个正整数a,b表示城市b到城市a有一条高速通道(a≠b)。

输出格式:

输出文件仅包含一行,一个整数,表示最少的被重建(即修改储存器容量)的米特储存器的数目。

输入输出样例

输入样例#1:

5
5
4
3
2
1
1 2
1 3
2 4
2 5

输出样例#1:

3

说明

【样例解释】

一个最优解是将A[1]改成8,A[3]改成4,A[5]改成2。这样,2和3运给1的量相等,4和5运

给2的量相等,且每天晚上六点的时候,1,2满,3,4,5空,满足所有限制条件。

对于100%的数据满足N<500000,A[j]<10^8

如下图,思路很好想到。

但是我们可以想到一个问题,根节点的值会炸飞!!,那我们怎么办呢?

网上一查,发现 log 可以将 乘法 巧妙地转换成 加法!

煮个栗子:

loga(MN)=logaM+logaN

这不就好办了嘛,我们只要把上图中根节点的各个值log再加起来,完美压缩了空间啊!

附代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#define MAXN 500010
using namespace std;
int n,c=1;
int val[MAXN],head[MAXN],deep[MAXN],size[MAXN];
double s[MAXN];
struct node{int next,to;
}a[MAXN<<1];
inline int read(){int date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w;
}
inline void add(int x,int y){a[c].to=y;size[x]++;a[c].next=head[x];head[x]=c++;
}
void buildtree(int rt){for(int i=head[rt];i;i=a[i].next){int will=a[i].to;if(!deep[will]){deep[will]=deep[rt]+1;buildtree(will);}}
}
void dfs(int rt,double k){s[rt]=k+log((double)val[rt]);for(int i=head[rt];i;i=a[i].next){int will=a[i].to;dfs(will,k+log((double)size[rt]));}
}
void work(){int m=1,ans=1;dfs(1,log(1.000));sort(s+1,s+n+1);for(int i=2;i<=n;i++){if(s[i]-s[i-1]<1e-8)ans=max(ans,++m);else m=1;}printf("%d\n",n-ans);
}
void init(){int x,y;n=read();for(int i=1;i<=n;i++){val[i]=read();size[i]=0;}for(int i=1;i<n;i++){x=read();y=read();add(x,y);}deep[1]=1;buildtree(1);
}
int main(){init();work();return 0;
}

洛谷P3237 [HNOI2014]米特运输相关推荐

  1. 洛谷P3237 [HNOI2014]米特运输 题解

    洛谷P3237 [HNOI2014]米特运输 题解 题目链接:P3237 [HNOI2014]米特运输 题意: 这题面是真的长啊 qwq 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为 ...

  2. P3237 [HNOI2014]米特运输

    P3237 [HNOI2014]米特运输 第104道题让我洛谷红名. (^ w ^) 题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存 ...

  3. 【动态规划】洛谷 P1282 多米诺骨牌

    [动态规划]洛谷 P1282 多米诺骨牌 时间限制: 1 Sec  内存限制: 128 MB 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下 ...

  4. 洛谷P1282 多米诺骨牌 题解

    洛谷P1282 多米诺骨牌 题解 题目链接:P1282 多米诺骨牌 题意: 多米诺骨牌由上下 222 个方块组成,每个方块中有 1∼61\sim61∼6 个点.现有排成行的上方块中点数之和记为 S1S ...

  5. BZOJ 3573 [HNOI2014]米特运输

    题目链接:传送门 冗长冗长的题面: 3573:[HNOI2014]米特运输3573: [HNOI2014]米特运输3573:[HNOI2014]米特运输 Description 米特是D星球上一种非常 ...

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

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

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

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

  8. [HNOI2014]米特运输

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

  9. 【bzoj3573】[Hnoi2014]米特运输

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

最新文章

  1. ​中国自动驾驶技术有多强?你可能还不知道
  2. VS出现异常?!和十进制转二进制比是小事
  3. 磁场对于电感路径检测的影响
  4. mac 香港购买分享
  5. java swing button和键盘监听冲突问题
  6. Bootstrap—基础样式定义
  7. python迭代器与生成器_Python的迭代器和生成器
  8. burst tx 功能 开启_Serverspeeder 锐速config配置文件详解
  9. perl如何遍历指定文件夹下的指定扩展名文件,并按时间顺序要求删除
  10. Origami 用于Quartz 的免费的交互设计框架
  11. UE4使用openCV库启动编辑器报错
  12. 黑客帝国“01”瀑布流C++
  13. 白话区块链~Pow,PoS,DPos
  14. 钳位二极管的工作原理
  15. linux蓝牙遥控,蓝牙遥控器连接流程分析
  16. 100部最佳美国影片
  17. win7计算机不能设置双屏怎么回事,win7怎么设置双屏显示?Win7双屏显示设置的方法...
  18. plotly绘制简单图形10--金字塔图
  19. Snackbars从顶部滑出的实现
  20. 理解Kotlin密封类Sealed

热门文章

  1. 山东大学软件学院2022数据库期末考试回忆版
  2. 该怎么去学UI设计?UI设计学习路线分享
  3. 微服务架构—优雅停机方案
  4. 利用和讯博客赚钱步骤详解
  5. java输出hello world_java输出Hello World
  6. win7更新错误0x800b0109_Win7自动更新失败怎么办
  7. 【渝粤题库】陕西师范大学202901小学生心理辅导作业(高起专 、专升本)
  8. 搞清线程池的几种实现方式
  9. nodejs的windows版本安装
  10. qml延迟代码_选择C而不是QML将您的代码减少80