正解:hash/二进制分解

解题报告:

传送门!

umm首先提取下题意趴QAQ

大概是说给一棵树,每个点有一个权值,要求修改一些点的权值,使得同一个父亲的儿子权值相同,且父亲的权值必须是所有儿子权值之和

首先其实可以想到,只要树上一个点确定了,其实整棵树都确定了,太显然了懒得证QAQ

所以现在其实是只要确定任意一个点就能知道要修改的数量

显然对根进行考虑是最简单的,因为知道根就知道总量,然后就十分显然地出来ans了,甚至答案都能被直接表示出来,设当前节点的权值为a[x],有tot个儿子,那么它的所有儿子节点就是a[x.son]=a[x]/tot

然后考虑,要尽量少的点修改,就是要尽量多的点不被修改,考虑怎么样的时候两个点是都不会被修改的?

不就是从根走到节点的链上的子节点个数乘积再乘以当前节点的权值相等嘛,这儿可以get趴,不能get的自己画个图然后钦定两个点相等从下向上递推过去就能get这个结论了QAQ

所以就考虑直接从根结点一路走下去,每到一个节点就记录一路过来经过的节点的子节点个数的乘积,转移非常好想不说

然后现在就变成了有多少个相等的权值,总量减最多的相等的权值的数量就是ans了

最后一个细节是,直接这么乘下去会爆精度,这里有两个处理方法,分别说下QAQ

第一个是可以想起之前有次考试求乘法最短路,用的就是转化成log,利用指数的美好性质,把乘法变成了加法,这里同样的思考,就把他们都取个log,然后就变成了加法,就欧克了QAQ

第二个是可以用个hash,就一路上取膜,然后判是否相等,然后为了保证正确性,就多取几个数,多膜几次就好

然后感觉hash那个挺麻烦的,,,我我我打到一半打不下去了,,,所以先放个麻油打完但是已经不想打的代码好了QAQ

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ll long long
#define rg register
#define gc getchar()
#define rp(i,x,y) for(rg ll i=x;i<=y;++i)
#define my(i,x,y) for(rg ll i=x;i>=y;--i)
#define e(i,x) for(rg ll i=head[x];i;i=edge[i].nxt) const ll N=+,mod1=,mod2=,mod3=;//,mod4=19871023,mod5=19970122;
ll n,a[N],head[N],ed_cnt,sz[N],hs1[mod1],hs2[mod2],hs3[mod3];//,hs4[mod4],hs5[mod5];
struct ed{ll to,nxt;}edge[N<<];
struct hsh{ll to,nxt;}hsh1[N],hsh2[N],hsh3[N],hsh4[N],hsh5[N]; il ll read()
{
rg char ch=gc;rg ll x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void ad(ll x,ll y){edge[++ed_cnt]=(ed){x,head[y]};head[y]=ed_cnt;}
il void ad_hs1(ll x,ll y){return;}
il void ad_hs2(ll x,ll y){return;}
il void ad_hs3(ll x,ll y){return;}
void dfs1(ll nw,ll muil,ll fa){ad_hs1(muil,a[nw]);e(i,nw)if(edge[i].to^fa)++sz[nw];e(i,nw)if(edge[i].to^fa)dfs1(edge[i].to,muil*sz[nw]%mod1,nw);}
void dfs2(ll nw,ll muil,ll fa){ad_hs2(muil,a[nw]);e(i,nw)if(edge[i].to^fa)dfs2(edge[i].to,muil*sz[nw]%mod2,nw);}
void dfs3(ll nw,ll muil,ll fa){ad_hs3(muil,a[nw]);e(i,nw)if(edge[i].to^fa)dfs3(edge[i].to,muil*sz[nw]%mod3,nw);}
//void dfs4(ll nw,ll muil,ll fa){ad_hs4(muil,a[nw]);e(i,nw)if(edge[i].to^fa)dfs4(edge[i].to,muil*sz[nw]%mod4,nw);}
//void dfs5(ll nw,ll muil,ll fa){ad_hs5(muil,a[nw]);e(i,nw)if(edge[i].to^fa)dfs5(edge[i].to,muil*sz[nw]%mod2,nw);} int main()
{
freopen("mtys.in","r",stdin);freopen("mtys.out","w",stdout);
n=read();rp(i,,n)a[i]=read();rp(i,,n-){ll x=read(),y=read();ad(x,y);ad(y,x);}dfs1(,,);dfs2(,,);dfs3(,,);
return ;
}

还有check和ad函数麻油写QAQ

但是感觉log的那个还是很可做的所以会放下那个的代码应该QAQ

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ll long long
#define rg register
#define gc getchar()
#define lf long double
#define rp(i,x,y) for(rg ll i=x;i<=y;++i)
#define my(i,x,y) for(rg ll i=x;i>=y;--i)
#define e(i,x) for(rg ll i=head[x];i;i=edge[i].nxt) const ll N=+;const lf eps=1e-;
ll n,a[N],head[N],ed_cnt,num,tmp=;
lf as[N];
struct ed{ll to,nxt;}edge[N<<]; il ll read()
{
rg char ch=gc;rg ll x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void ad(ll x,ll y){edge[++ed_cnt]=(ed){x,head[y]};head[y]=ed_cnt;}
void dfs(ll nw,lf muil,ll fa)
{
as[nw]=muil+(lf)log(a[nw]);ll tot=;e(i,nw)if(edge[i].to^fa)++tot;
e(i,nw)if(edge[i].to^fa)dfs(edge[i].to,muil+(lf)log(tot),nw);
} int main()
{
// freopen("mtys.in","r",stdin);freopen("mtys.out","w",stdout);
n=read();rp(i,,n)a[i]=read();rp(i,,n-){ll x=read(),y=read();ad(x,y);ad(y,x);}dfs(,log(1.0),);
sort(as+,as++n);rp(i,,n)if(abs(as[i]-as[i-])<=eps)++tmp;else num=max(num,tmp),tmp=;num=max(num,tmp);printf("%lld\n",n-num);
return ;
}

然后那个log的代码是真的简单,,,QAQ

洛谷P3237 米特运输 [HNOI2014] hash/二进制分解的更多相关文章

  1. 洛谷P3237 米特运输

    题目链接 题意: 中文题,挺好理解.就是让节点的权值等于各子节点权值之和,然后每个子节点的权值相等,原本每个点有一个权值,通过最少次的修改(可以修改成小数)使其满足要求. 分析: 题意一旦读明白,题什 ...

  2. 洛谷 P3237 [HNOI2014]米特运输 解题报告

    P3237 [HNOI2014]米特运输 题目描述 米特是\(D\)星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. \(D\)星上有 ...

  3. 【题解】【洛谷 P1967】 货车运输

    目录 洛谷 P1967 货车运输 原题 题解 思路 代码 洛谷 P1967 货车运输 原题 题面请查看洛谷 P1967 货车运输. 题解 思路 根据题面,假设我们有一个普通的图: 作图工具:Graph ...

  4. 【题解】洛谷P1967 [NOIP2013TG] 货车运输(LCA+kruscal重构树)

    洛谷P1967:https://www.luogu.org/problemnew/show/P1967 思路 感觉2013年D1T3并不是非常难 但是蒟蒻还是WA了一次 从题目描述中看出每个点之间有许 ...

  5. 洛谷P3237 [HNOI2014]米特运输(树形dp)

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

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

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

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

    题面链接 get到新技能当然要来记录一下辣 题意:给一棵树,每个点有一个权值,要求同一个父亲的儿子的权值全部相同,父亲的取值必须是所有儿子的权值和,求最少的修改数量 sol:自己瞎鸡巴yy一下可以发现 ...

  8. 洛谷P3234 抄卡组 [HNOI2014] 字符串hash

    正解:字符串hash 解题报告: 传送门! 字符串hash是字符串匹配中很常见的一个方法,原理也很好懂,这里就不做太多阐述辣有时间放到hash笔记里面去QAQ 题意不说了挺好理解的,自带一句话概括好评 ...

  9. 洛谷P1117 优秀的拆分【Hash】【字符串】【二分】【好难不会】

    题目描述 如果一个字符串可以被拆分为AABBAABB的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串aabaabaaaabaabaa,如果令 A=aabA ...

随机推荐

  1. Sass编译时Invalid US-ASCII character解决办法

    编译scss文件时,如果出现如下错误 Error: Invalid US-ASCII character "\xC2" on line 63 of src/assets/_scss ...

  2. Java知多少(10)数据类型及变量

    Java 是一种“强类型”的语言,声明变量时必须指明数据类型.变量(variable)占据一定的内存空间.不同类型的变量占据不同的大小. Java中共有8种基本数据类型,包括4 种整型.2 种浮点型. ...

  3. Ubuntu 设置NAT共享网络(命令行方法)

    本文介绍如何使用iptables来实现NAT转发,事实上就是将一台机器作为网关(gateway)来使用.我们假设充当网关的机器至少有网卡eth0和eth1,使用eth0表示连接到外网的网卡,使用eth ...

  4. SpringBoot整合Mail

    前言 SpringBoot实现邮件功能是非常的方便快捷的,因为SpringBoot默认有starter实现了Mail. 发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息 ...

  5. Hibernate HQL的使用

    1.简单查询(查询所有) Session session=HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx=s ...

  6. 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库——安装配置NTP服务,保证集群时间保持同步

    一.所有节点上使用yum安装配置NTP服务yum install ntp -y 二.选定一台节点作为NTP server, 192.168.58.11修改/etc/ntp.conf vim /etc/ ...

  7. Windows 下单机最大TCP连接数

    在做Socket 编程时,我们经常会要问,单机最多可以建立多少个 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接数. Windows 下单机的TCP连接数有多个参数共同决定,下面一 ...

  8. Dedecms5.7搜索结果页空白无内容的解决方法

    Dedecms5.7搜索结果页空白.没有内容的解决方法 许多网友在修改dedecms5.7版本的搜索功能时搜索空白的解决方法,正解如下: 系统设置—>其他选项—->是否启用文章全文检索功能 ...

  9. [React] 05 - Route: connect with ExpressJS

    基础: 初步理解:Node.js Express 框架 参见:[Node.js] 08 - Web Server and REST API 进阶: Ref: 如何系统地学习 Express?[该网页有 ...

  10. 给hmailserver添加DKIM签名

    上一篇说了hmailserver如何设置反垃圾邮件功能,现在来说说如何让自己的hmailserver发出去的邮件不要被别人反垃圾了.在hmailserver的反垃圾邮件功能中有提到给垃圾评分标准,其中 ...