题目传送门(内部题59)


输入格式

第一行一个数$n$表示点数。
第二行$n$个数$A_i$。
接下来$n−1$行,每行两个数$u,v$表示$u$和$v$有边直接相连。


输出格式

一个数表示最小花费的起点。


样例

样例输入:

5
2 2 1 2 2
1 2
2 3
3 4
4 5

样例输出:

3


数据范围与提示

对于$10\%$的数据,保证$n\leqslant 50$。
对于$30\%$的数据,保证$n\leqslant 500$。
对于$50\%$的数据,保证$n\leqslant 5,000$。
对于$70\%$的数据,保证$n\leqslant 1\times {10}^5$。
对于$100\%$的数据,保证$n\leqslant 1\times {10}^6$,$A_i$在$[1,1\times {10}^9]$内随机生成


题解

又是一道假的期望,还好我及时的看了出来……

我们设$g[i]$表示点$i$的子树对其的贡献,设$f[i]$表示点$i$的非子树对其的贡献。

显然子树贡献很好求,即为:

$$g[u]=\sum \limits_{v}\frac{g[v]}{son[u]}+a[u]$$

现在考虑非子树的,即为:

$$f[u]=\frac{(g[fa]+(g[fa]-a[fa])\times son[u]-g[u])}{son[fa]}+a[fa]$$

那么,每个点的答案即为:

$$\frac{(f[u]+(g[u]-a[u])\times son[i])}{(son[i]+1)}+a[i]$$

题目稍卡常(考试的时候把常数写的稍大,被卡掉了$10$分……)

时间复杂度:$\Theta(n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
struct rec{int nxt,to;}e[2000001];
int head[1000001],cnt;
int n;
double a[1000001];
bool vis[1000001];
double du[1000001];
double dp[2][1000001];
pair<int,double> ans;
void add(int x,int y)
{
e[++cnt].nxt=head[x];
e[cnt].to=y;
head[x]=cnt;
}
void dfs(int x)
{
vis[x]=1;
dp[0][x]=a[x];
for(int i=head[x];i;i=e[i].nxt)
if(!vis[e[i].to])
{
dfs(e[i].to);
dp[0][x]+=dp[0][e[i].to]/du[x];
}
}
void DP(int x,int fa)
{
dp[1][x]=(dp[1][fa]+(dp[0][fa]-a[fa])*du[fa]-dp[0][x])/du[fa]+a[fa];
double flag=(dp[1][x]+(dp[0][x]-a[x])*du[x])/(du[x]+1)+a[x];
if(fabs(flag-ans.second)<1e-8)ans.first=min(x,ans.first);
if(ans.second-flag>1e-8)ans=make_pair(x,flag);
for(int i=head[x];i;i=e[i].nxt)
if(e[i].to!=fa)DP(e[i].to,x);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lf",&a[i]);
du[i]=-1;
}
du[1]=0;
for(int i=1;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
du[x]++;du[y]++;
}
dfs(1);
ans=make_pair(1,dp[0][1]);
for(int i=head[1];i;i=e[i].nxt)
DP(e[i].to,1);
printf("%d",ans.first);
return 0;
}

rp++

[CSP-S模拟测试]:randomwalking(DP)的更多相关文章

  1. noi2019模拟测试赛(四十七)

    noi2019模拟测试赛(四十七) T1与运算(and) 题意: ​ 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...

  2. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

  3. [考试反思]1003csp-s模拟测试58:沉淀

    稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...

  4. [考试反思]0814NOIP模拟测试21

    前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...

  5. csp-s模拟测试98

    csp-s模拟测试98 $T1$??不是我吹我轻松手玩20*20.$T2$装鸭好像挺可做?$T3$性质数据挺多提示很明显? $One$ $Hour$ $Later$ 这$T1$什么傻逼题真$jb$难调 ...

  6. csp-s模拟测试97

    csp-s模拟测试97 猿型毕露.水题一眼秒,火题切不动,还是太菜了. $T1$看了一会儿感觉$woc$期望题$T1??$假的吧??. $T2$秒. $T3$什么玩意儿. 40 01:24:46 00 ...

  7. csp-s模拟测试95

    csp-s模拟测试95 去世场祭. $T1$:这不裸的除法分块吗. $T2$:这不裸的数据结构优化$Dp$吗. $T3$:这不裸的我什么都不会搜索骗$30$分吗. 几分钟后. 这除法分块太劲了..(你 ...

  8. csp-s模拟测试93

    csp-s模拟测试93 自闭场. $T1$想到$CDQ$,因为复杂度少看见一个$0$打了半年还用了$sort$直接废掉,$T2$,$T3$直接自闭暴力分都没有.考场太慌了,心态不好. 02:07:34 ...

  9. csp-s模拟测试92

    csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...

随机推荐

  1. Vagrant 构建 LNMP 一致环境

    GitHub 地址 <--- 所有文件都在这里 前提条件 安装 Vagrant,VirtualBox. 设置 下载软件并放入 soft 目录 MySQL:mysql-5.7.22-1.el7.x ...

  2. curl 和 wget 命令

    1. curl curl 支持 HTTP.HTTPS.FTP 等协议,还支持 POST.cookies.认证.从指定偏移处下载部分文件.User-Agent.限速.文件大小.进度条等特征. 1.1 选 ...

  3. JSP中四种属性保存范围(1)

    一.四种属性范围 在JSP中提供了四种属性保存范围 page:在一个页面内保存属性,跳转之后无效request:在一次服务请求范围内,服务器跳转后依然有效session:-在一次会话范围内,无论何种跳 ...

  4. DbWrench001--简介

    DbWrench--简介 mac下载地址:http://www.dbwrench.com/ DbWrench 工具等价于powerdesigner 均为数据库原型设计工具 DbWrench 详细介绍 ...

  5. Git009--分支管理&创建与合并分支

    Git--分支管理&创建与合并分支 一.分支管理 本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578 ...

  6. mybatis报错:org.apache.ibatis.builder.BuilderException:Encountered " "shr" "shr " " at line 1,column 1

    程序报错如下: 解决:变量名冲突 表字段‘审核人’简称为shr,与mybatis的OGNL表达式发生冲突. 解决方法:修改冲突的变量名即可. 总结了一下变量命名可能发生冲突的变量集合: bor(字符| ...

  7. Angular2+之模态框-使用ngx-bootstrap包中的模态框组件实现

    模态框是项目中经常会用到的一个公共功能,通常会被用左提示框或者扩展选项框. 下面,我用一个小例子来简单展示实现模态框功能的过程: 1.为项目加包: ng add ngx-bootstrap 2.在xx ...

  8. 【JAVA】java中的length和length()

    参考链接: 你注意到Java中的length和length()了吗?外加一个size() java中的求长度length有时有小括号,有时没有小括号,到底什么时候该加小括号呢? 总结: Java中St ...

  9. 箭头函数中的this

    箭头函数中的this 箭头函数根据外层(函数或者全局)作用域来决定this 这样this就像其他面向对象的语言,在哪里定义就指向哪里 function foo() { return (x) => ...

  10. 11-基于CPCI的中频功率放大收发板

    1.板卡参数介绍 无线输入口 无线发射口 1M~3GHZ,可调,步进100HZ(非跳频模式) 功率:≤﹢10±2.5 dBm 收发通道数 收发各1通道/板 中频输入输出 70MHz, 5MHz/30M ...