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

题目链接:P3237 [HNOI2014]米特运输

题意

这题面是真的长啊 qwq

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

题目讲了半天其实就是说

  • 给定一棵树,树上每个结点有权值

  • 求最少修改结点权值的次数,使得 val[u]=∑val[v]\text{val}[u]=\sum \text{val}[v]val[u]=∑val[v]

    其中 vvv 为 uuu 的儿子。

不知道谁把它放在树形dp题单里的(恼

手推一下就可以发现,只要确定了一个结点,其他所有的结点都可以确定了

考虑把每个结点确定后形成的树都给算出来

然后在这一堆树里面找到相同树的个数的最大值 mx\text{mx}mx

答案就是 n−mxn-\text{mx}n−mx

这个树怎么算呢,这里有一张图,来自link

即设 f[u]f[u]f[u] 为 uuu 所形成的树的"特征值",则有
f[u]=∏sz[d]×val[u]f[u]=\prod \text{sz}[d] \times \text{val}[u] f[u]=∏sz[d]×val[u]
其中 ddd 为 uuu 的祖先结点。

似乎只要把这个值算出来就好了,不过它会爆long long

考虑用 log⁡\loglog 转化计算( log⁡(ab)=log⁡a+log⁡b\log (ab) = \log a + \log blog(ab)=loga+logb )

然后比较的时候只要排序一下就好了

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

代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
#define int long long
#define double long double
#define INF 0x3f3f3f3f3f3f3f3f
#define N (int)(5e5+15)
double f[N];
vector<int> vec[N];
int n,val[N],cnt=1,mn,sz[N],fa[N];
const double eps=1e-13;
int dcmp(double x)
{if(fabs(x)<=eps)return 0;return x>eps?1:-1;}
void dfs1(int u,int f)
{fa[u]=f;sz[u]=0;for(int v : vec[u])if(v!=f)sz[u]++,dfs1(v,u);
}
void dfs2(int u,double sum)
{f[u]=sum+log((double)val[u]);for(int v : vec[u]){if(v==fa[u])continue;dfs2(v,sum+log((double)sz[u]));}
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);// freopen("check.in","r",stdin);// freopen("check.out","w",stdout);cin >> n; mn=n-1;for(int i=1; i<=n; i++)cin >> val[i];for(int i=1,u,v; i<n; i++){cin >> u >> v;vec[u].push_back(v);vec[v].push_back(u);}dfs1(1,1);dfs2(1,log(1.0));sort(f+1,f+1+n);for(int i=1; i<n; i++){if(!dcmp(f[i]-f[i+1]))++cnt,mn=min(mn,n-cnt);else cnt=1;}cout << mn;return 0;
}

转载请说明出处

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

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

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

  2. P3237 [HNOI2014]米特运输

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

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

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

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

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

  5. 洛谷P5520 [yLOI2019] 青原樱 题解

    洛谷P5520 [yLOI2019] 青原樱 题解 题目链接:P5520 [yLOI2019] 青原樱 题意: n n n 个空放 m m m 个物品,两两物品不能直接相邻,至少空一格 纯数学题. 看 ...

  6. 洛谷P5633 最小度限制生成树 题解

    洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...

  7. 洛谷P2619 [国家集训队]Tree I 题解

    洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...

  8. 洛谷P4084 [USACO17DEC]Barn Painting G 题解

    洛谷P4084 [USACO17DEC]Barn Painting G 题解 题目链接:P4084 [USACO17DEC]Barn Painting G 题意:题意:给定一颗N个节点组成的树,3种颜 ...

  9. BZOJ 3573 [HNOI2014]米特运输

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

最新文章

  1. hibernate.hbm2ddl.auto的value
  2. python~OpenCV
  3. java arraylist的问题
  4. (摘要)100个伟大的商业理念:理念34:企业社会责任
  5. 云端研发新基建:Serverless与持续架构服务落地实践
  6. 挂机宝和网站服务器,挂机宝SSD硬盘vs普通硬盘访问官网哪个快?
  7. android获取系统当前年月日时分秒的时间
  8. android之日志库logger
  9. 六面美团后,我有一个重要的发现...
  10. javaScript常见的五种数组去重(转载)
  11. angular : direative :comunication 指令之间的通讯
  12. 外部中断器微型计算机课程设计,课程设计-电子时钟参考.doc
  13. 大型工业互联网项目(5000w+)投标复盘
  14. jeesit1.27(3)-id生成策略
  15. 用AI让逝去的亲人照片动起来后,数百万网友泪目:原来思念这么重
  16. 计算机备注用if函数怎么算,excel SUMIF函数按条件求和的使用详解
  17. 【Python爬虫案例学习10】基于Requests爬取拉勾网招聘信息,并保存至本地csv文件
  18. python显示代码运行时间_python测量代码运行时间方法
  19. 让面试官哑口无言的JS奇葩知识,你遇到过吗?
  20. Android 安装的app

热门文章

  1. java模拟回合制游戏大小姐_[源码和文档分享]基于java的RPG回合制游戏
  2. 微信直播相对一般直播平台怎么样?有哪些优势?
  3. bzoj 1415 [Noi2005]聪聪和可可
  4. uwp是用xaml还是html5,使用 c 和 XAML 开发 UWP 程序
  5. 生活琐事随感 (r5笔记第43天)
  6. 4 分钟,快速了解声网 Agora SDK 3.0
  7. 不可错过的250款独立游戏(珍藏版)
  8. spring实战学习(二)spEL表达式
  9. 安超云生态 | 安超云与硅格半导体完成产品兼容互认证 携手打造协同生态
  10. 安超OS为企业数字化转型构建坚实的云基座