题目传送门(内部题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. postgresql中实现按周统计详解

    SELECT EXTRACT(DOW FROM CURRENT_DATE);   执行结果如下. 这个SQL语句的意思就是计算当前日期是一周中的第几天. EXTRACT(DOW FROM CURREN ...

  2. UML 类图快速入门

    UML 图形 官方定义 UML 类图(Class Diagram) UML 时序图(Sequence Diagram) 领域 UML 类图和实现 UML 类图 领域 UML 类图 实现 UML 类图 ...

  3. Linux 初始化系统(init)- systemd

    wikipedia 浅析 Linux 初始化 init 系统 systemd 中文手册 fedoraproject - systemd 1. Systemd 简介 Systemd 是 Linux 系统 ...

  4. HBase备份还原OpenTSDB数据之Export/Import(增量+全量)

    前言 本文基于伪分布式搭建 hadoop+zookeeper+hbase+opentsdb之后,文章链接:https://www.cnblogs.com/yybrhr/p/11128149.html, ...

  5. vue封装分页组件

    element提供的分页是已经封装好的组件,在这里再次封装是为了避免每个用到分页的页面点击跳转时都要写一遍跳转请求 分页组件 <!--分页组件--> <template> &l ...

  6. 关于VMWare的几种网络模式

    具体的可以参考这个博文:http://zhenyaliu.blog.163.com/blog/static/2377571920103775447527/

  7. mac安装pip并升级pip版本

      最近想安装inchat,直接使用命令pip install install,结果提示 使用提示中的命令升级,结果提示找不到pip.很郁闷,明明有pip,结果一升级还给升没了.最后用的是这个方法完美 ...

  8. EF - order by specific values

    List<string> s = new List<string>() { "A", "家", "帮", " ...

  9. vim-tabe多标签切换

    vim-tabe多标签切换 本文转载自https://www.cnblogs.com/liqiu/archive/2013/03/26/2981949.html 1.新建标签页 使用:tabe命令和文 ...

  10. 我心中的ASP.NET Core 新核心对象WebHost(二)

    这是ASP.NET Core新核心对象系列的第二篇,上一篇 WebHost准备阶段 我们讲到了WebHostBuilder的初始化及配置.我们给WebHostBuilder进行以下配置 UseKest ...