A6834 | 「HNOI2014」米特运输
来源省选
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
米特是 D 星球上一种非常神秘的物质,蕴含着巨大的能量。在以米特为主要能源的 D 星上,这种米特能源的运输和储存一直是一个大问题。
D 星上有 $N$ 个城市,我们将其顺序编号为 $1$ 到 $N$,$1$ 号城市为首都。这 $N$ 个城市由 $N-1$ 条单向高速通道连接起来,构成一棵以 $1$ 号城市(首部)为根的树,高速通道的方向由树中的儿子指向父亲。树按深度分层:根结点深度为 $0$ ,属于第 $1$ 层;根结点的子节点深度为 $1$,属于第 $2$ 层;依此类推,深度为 $i$ 的结点属于第 $i+1$ 层。
建好高速通道之后,D 星人开始考虑如何具体地储存和传输米特资源。由于发展程度不同,每个城市储存米特的能力不尽相同,其中第 $i$ 个城市建有一个容量为
$A_i$ 的米特储存器。这个米特储存器除了具有储存的功能,还具有自动收集米特的能力。如果到了晚上六点,有某个储存器处于未满的状态,它就会自动收集大气中蕴含的米特能源,在早上六点之前就能收集满;但是,只有在储存器完全空的状态下启动自动收集程序才是安全的,未满而又非空时启动可能有安全隐患。
早上六点到七点间,根节点城市($1$ 号城市)会将其储存器里的米特消耗殆尽。根节点不会自动搜集米特,它只接受子节点传输来的米特。早上七点,城市之间启动米特传输过程,传输过程逐层递进:先是第 $2$ 层节点城市向第 $1$ 层(根节点城市,即 $1$ 号城市)传输,直到第 $1$ 层的储存器满或第 $2$ 层的储存器全为空;然后是第 $3$ 层向第 $2$ 层传输,直到对于第 $2$ 层的每个节点,其储存器满或其子节点(位于第 $3$ 层)的储存器全为空;依此类推,直到最后一层传输完成。传输过程一定会在晚上六点前完成。
由于技术原因,运输方案需要满足以下条件:
1. 不能让某个储存器到了晚上六点传输结束时还处于非空但又未满的状态,这个时候储存器仍然会启动自动收集米特的程序,而给已经储存有米特的储存器启动收集程序可能导致危险,也就是说要让储存器到了晚上六点时要么空要么满;
2. 关于首都——即 $1$ 号城市的特殊情况, 每天早上六点到七点间 $1$ 号城市中的米特储存器里的米特会自动被消耗殆尽,即运输方案不需要考虑首都的米特怎么运走;
3. 除了 $1$ 号城市,每个节点必须在其子节点城市向它运输米特之前将这座城市的米特储存器中原本存有的米特全部运出去给父节点,不允许储存器中残存的米特与外来的米特发生混合;
4. 运向某一个城市的若干个来源的米特数量必须完全相同,不然,这些来源不同的米特按不同比例混合之后可能发生危险。
现在 D 星人已经建立好高速通道,每个城市也有了一定储存容量的米特储存器。为了满足上面的限制条件,可能需要重建一些城市中的米特储存器。你可以,也只能,将某一座城市(包括首都)中原来存在的米特储存器摧毁,再新建一座任意容量的新的米特储存器,其容量可以是小数(在输入数据中,储存器原始容量是正整数,但重建后可以是小数),不能是负数或零,使得需要被重建的米特储存器的数目尽量少。
D 星上有 $N$ 个城市,我们将其顺序编号为 $1$ 到 $N$,$1$ 号城市为首都。这 $N$ 个城市由 $N-1$ 条单向高速通道连接起来,构成一棵以 $1$ 号城市(首部)为根的树,高速通道的方向由树中的儿子指向父亲。树按深度分层:根结点深度为 $0$ ,属于第 $1$ 层;根结点的子节点深度为 $1$,属于第 $2$ 层;依此类推,深度为 $i$ 的结点属于第 $i+1$ 层。
建好高速通道之后,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-1$ 行,每行两个正整数 $a$,$b$ 表示城市 $b$ 到城市 $a$ 有一条高速通道 $(a\neq b)$。
接下来 $N$ 行,每行一个正整数,其中的第 $i$ 行表示第 $i$ 个城市原来存在的米特储存器的容量。
再接下来是 $N-1$ 行,每行两个正整数 $a$,$b$ 表示城市 $b$ 到城市 $a$ 有一条高速通道 $(a\neq b)$。
输出格式
输出文件仅包含一行,一个整数,表示最少的被重建(即修改储存器容量)的米特储存器的数目。
输入输出样例
输入 #1
5 5 4 3 2 1 1 2 1 3 2 4 2 5
输出 #1
3
对于所有的数据,$N \leq 500000,\ A_j \leq 10^8$。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?