题目链接

戳我

\(Describe\)

谁出的题目啊?这么长的题面,看完就滚粗了.强烈谴责

给一棵树,每个点有一个权值,要求修改一些权值,使:

  1. 一个点的权值必须是其所有儿子的权值之和
  2. 一个点的儿子权值必须相同

    求最少的被修改的数目

\(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」米特运输的更多相关文章

  1. 「HNOI 2014」 江南乐

    \(Description\) \(n\)堆石子,每堆石子有\(s_i\)个,两个人轮流操作,每次可以将一对不少于\(F\)的石子尽量平均分成\(m\)堆,\(m\)每次自选,不能操作者输.共有\(T ...

  2. 「HNOI 2014」 画框

    题目链接 戳我 \(Solution\) 这一题很像最小乘积生成树.只是把\(kruskal\)变为了\(km\)/费用流 现在来讲一讲最小乘积生成树.首先将\(\sum a_i\)和\(\sum b ...

  3. LOJ#3054. 「HNOI 2019」鱼

    LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...

  4. LG3237 「HNOI2014」米特运输 树形DP

    问题描述 LG3237 题解 问题转化为: 要求将这棵树,满足 结点 \(x\) 所有孩子权值相等 结点 \(x\) 权值等于所有孩子权值和 将乘法转化为 \(\log\) 加法 \(\mathrm{ ...

  5. 「HNOI 2019」白兔之舞

    一道清真的数论题 LOJ #3058 Luogu P5293 题解 考虑$ n=1$的时候怎么做 设$ s$为转移的方案数 设答案多项式为$\sum\limits_{i=0}^L (sx)^i\bin ...

  6. 「HNOI 2016」 序列

    \(Description\) 给你一个序列,每次询问一个区间,求其所有子区间的最小值之和 \(Solution\) 这里要用莫队算法 首先令\(val\)数组为原序列 我们考虑怎么由一个区间\([l ...

  7. 「HNOI 2015」实验比较

    \(Description\) 有\(n\)个元素,对于每个元素\(x_i\)最多知道一个形如\(x_j < x_i\)或\(x_j=x_i\)的条件,问有多少合法的序列.合法的序列满足每个元素 ...

  8. 「HNOI 2015」亚瑟王

    \(Description\) 有\(n\)张卡牌,每一张卡牌有\(p_i\)的概率发动,并造成\(d_i\)点伤害.一共有\(r\)轮,每一轮按照编号从小到大依次考虑,如果这张牌已经发动过则跳过该牌 ...

  9. 「HNOI 2015」菜肴制作

    题目链接 戳我 \(Description\) 有若干限制,需要求一个\(1\)到\(n\)的排列,每个限制\((x,y)\)表示\(x\)必须在\(j\)之前,并要求所求的排列满足所有限制并让\(1 ...

随机推荐

  1. 【转】SVN 与 GIT 详细对比

    git和svn的详细对比   近期就[版本管理工具是否进行切换SVN->Git]的问题进行了讨论,于是对svn和Git进行了相关研究,进而梳理出Git的特点(优.缺点),最后将Git与SVN进行 ...

  2. 运维自动化工具 Cobbler

    简介: 关于操作系统安装方面的自动化,早前我们使用 RedHat 推出的 Kickstart 来批量安装操作系统,近年来 RedHat 又推出一个 Cobbler . Cobbler 使用 Pytho ...

  3. excel表格的应用之简单的数据可视化

    上面的为我们需要的手长与身高的数据 上面的是我们的数据可视化之后的点状图 我们需要先选中我们需要的数据表 然后点击我们插入中的推荐图表的选项 点开后会弹出这个界面 然后我们只需要选择char进行插入就 ...

  4. BAT脚本编写教程

    windows批处理 (cmd/bat) 编程详解 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码 ...

  5. Linux重启mysql Error getting authority: Error initializing authority: Could not connect: Resource temporarily unavailable (g-io-error-quark, 27)

    问题: Linux下重启mysql: systemctl restart mysqld 出现以下错误: Error getting authority: Error initializing auth ...

  6. SpringData JPA整理

    一 首先熟悉几种jpa中的接口Repository,CrudRepository,PagingAndSortingRepository,JpaRepository,JpaSpecificationEx ...

  7. MVC Pager使用

    View中加入引用:@using Webdiyer.WebControls.Mvc; 使用时代码: <div id="Pagination"> @Html.Pager( ...

  8. Python使用signal模块实现定时执行

    在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点在程序中可以用定时器实现这种功能,于是就开始摸索了,发现需要一些信号的知识... ...

  9. 实践作业4:Web测试实践(小组作业)每日任务记录1

    会议时间:2017年12月21日会议地点:东九教学楼自习区主 持 人:王晨懿参会人员:王晨懿.余晨晨.郑锦波.杨潇.侯欢.汪元记 录 人:王晨懿会议议题:小组作业熟悉和任务分配 (一)选择待测产品 我 ...

  10. 七)oracle 2 mysql

    /* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 50527 Source Host : ...