「HNOI 2014」米特运输
题目链接
\(Describe\)
谁出的题目啊?这么长的题面,看完就滚粗了.强烈谴责
给一棵树,每个点有一个权值,要求修改一些权值,使:
- 一个点的权值必须是其所有儿子的权值之和
- 一个点的儿子权值必须相同
求最少的被修改的数目
\(Solution\)
随便画一画图就可以找到一些显著的规律,只要确定了一个点的权值就可以知道整颗树的值了.
这里就不详细的给出图进行解释了,自己画一画图就可以知道了.
于是我们可以令\(val[x]\)表示\(x\)这个点不变的话,根节点的值.
但是将子节点的个数成起来会爆\(long\ long\),所以需要运用一点小技巧:\(log\)
运用公式:\(log(a*b)=log(a)+log(b)\)
答案就是\(n-val\)数组中相同个数最多的.
\(Code\)
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-6;
int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
return x*f;
}
struct node {
int to,next;
}a[500010<<1];
double val[500010];
int v[500010],head[500010],s[500010],cnt;
void add(int x,int y){
a[++cnt].next=head[x],a[cnt].to=y,head[x]=cnt;
a[++cnt].next=head[y],a[cnt].to=x,head[y]=cnt;
}
void dfs(int x,int fa,double ans){
val[x]=ans+log(v[x]),s[x]--;
for(int i=head[x];i;i=a[i].next){
int v=a[i].to;
if(v==fa)
continue;
dfs(v,x,ans+log(s[x]));
}
}
main(){
int n=read(),x,y,maxx=0,js=1;
for(int i=1;i<=n;i++)
v[i]=read();
for(int i=1;i<n;i++)
x=read(),y=read(),add(x,y),s[x]++,s[y]++;
s[1]++,dfs(1,0,0);
sort(val+1,val+1+n);
for(int i=2;i<=n;i++){
if(val[i]-val[i-1]<eps)
js++;
else maxx=max(maxx,js),js=1;
}
printf("%d",n-maxx);
}
「HNOI 2014」米特运输的更多相关文章
- 「HNOI 2014」 江南乐
\(Description\) \(n\)堆石子,每堆石子有\(s_i\)个,两个人轮流操作,每次可以将一对不少于\(F\)的石子尽量平均分成\(m\)堆,\(m\)每次自选,不能操作者输.共有\(T ...
- 「HNOI 2014」 画框
题目链接 戳我 \(Solution\) 这一题很像最小乘积生成树.只是把\(kruskal\)变为了\(km\)/费用流 现在来讲一讲最小乘积生成树.首先将\(\sum a_i\)和\(\sum b ...
- LOJ#3054. 「HNOI 2019」鱼
LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...
- LG3237 「HNOI2014」米特运输 树形DP
问题描述 LG3237 题解 问题转化为: 要求将这棵树,满足 结点 \(x\) 所有孩子权值相等 结点 \(x\) 权值等于所有孩子权值和 将乘法转化为 \(\log\) 加法 \(\mathrm{ ...
- 「HNOI 2019」白兔之舞
一道清真的数论题 LOJ #3058 Luogu P5293 题解 考虑$ n=1$的时候怎么做 设$ s$为转移的方案数 设答案多项式为$\sum\limits_{i=0}^L (sx)^i\bin ...
- 「HNOI 2016」 序列
\(Description\) 给你一个序列,每次询问一个区间,求其所有子区间的最小值之和 \(Solution\) 这里要用莫队算法 首先令\(val\)数组为原序列 我们考虑怎么由一个区间\([l ...
- 「HNOI 2015」实验比较
\(Description\) 有\(n\)个元素,对于每个元素\(x_i\)最多知道一个形如\(x_j < x_i\)或\(x_j=x_i\)的条件,问有多少合法的序列.合法的序列满足每个元素 ...
- 「HNOI 2015」亚瑟王
\(Description\) 有\(n\)张卡牌,每一张卡牌有\(p_i\)的概率发动,并造成\(d_i\)点伤害.一共有\(r\)轮,每一轮按照编号从小到大依次考虑,如果这张牌已经发动过则跳过该牌 ...
- 「HNOI 2015」菜肴制作
题目链接 戳我 \(Description\) 有若干限制,需要求一个\(1\)到\(n\)的排列,每个限制\((x,y)\)表示\(x\)必须在\(j\)之前,并要求所求的排列满足所有限制并让\(1 ...
随机推荐
- ios常用空间UIScrollViewIndicator的一些属性
UIScrollView属性: 1 alwaysBounceHorizontal BOOL值,当水平滚条到达终点,总是(视图)弹跳 2 alwaysBounceVertical ...
- MYSQL的随机查询的实现方法
的确是那么回事. MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() ...
- Hello Build To Win!我们是奶牛小分队!——记第一次团队作业
Hello Build To Win!我们是奶牛小分队! section 1 组建团队 1. 队员介绍: 姓名 学号 风格 擅长技术 编程兴趣 希望软工角色 吴建瑜 2016012024 努力学习, ...
- Linux运维入门(二):网络基础知识梳理02
一,交换机的基本原理 1.1 数据链路层的功能 (1)数据链路层负责网络中相邻节点之间可靠的数据通信,并进行有效的流量控制. (2)数据链路层的作用包括数据链路的建立,维护与拆除,帧包装,帧传输,帧同 ...
- Excel VBA入门(五)Excel对象操作
本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Ra ...
- ORM思想
-------------------siwuxie095 什么是 ORM 思想 1.Hibernate 使用 ORM 思想对数据库进行 CRUD 操作 2.ORM:Object Relational ...
- 设计模式(java的23种设计模式)
转自:leshui http://blog.csdn.net/leshui/article/details/11951 在java版看见了这篇文章,作者以轻松的语言比喻了java的32种模式,有很好的 ...
- 实践作业4---DAY4阶段三。
阶段三:给出结论 这一阶段,我们首先列表从核心功能.细节.用户体验.辅助功能差异化功能.软件的适应性和成长性展开.我们得结论前参考了权威网站数据.并自己也做了相应分析. 结论:经过这么多工作,这个软件 ...
- Smarty的循环
(1)section.sectionelse功能多,参数多.或许不是太实用.是smarty用来做循环操作的函数之一.(2)了解基本属性name和loop <section name=articl ...
- [GO]可见性
GO的可见性:如果想使用别的包的函数.结构体类型.结构体成员 函数名.结构体类型.结构体成员变量名的首字母必须是大写,则为可见,反之,则只能在一个包里使用 比如本来就有一个项目叫awesomeproj ...