Portal --> cf123E

Solution

  首先步数的话可以转化成每条边经过了几次这样来算

  假设现在确定了起点\(S\)和终点\(T\),我们将\(T\)看成树根,那么考虑边\((u,v)\)的经过次数可以分成下面三种情况:

  1.\((u,v)\)在\(S\)到\(T\)的路径上,那么这条边肯定要被经过,期望为1

  2.\((u,v)\)不在\(S\)到\(T\)的路径上,但是在\(T\)包含\(S\)的那个儿子的子树里面,那么这条边有两种情况:被经过\(2\)次或者不被经过

  考虑一下经过顺序对贡献的影响,可以得到这样的一个结论:如果\((u,v)\)所在的“分叉”的访问顺序在\(S\)到\(T\)的路径之前,那么这条边会被经过两次,否则就一次都不会被经过。也就是:

  该图中的橙边会被访问两次而蓝边一次都不会被访问到

  而\((u,v)\)所在的分叉的位置只可能在直接路径的前面或者后面,所以期望是\(2*\frac{1}{2}+0*\frac{1}{2}=1\)

  3.\((u,v)\)不在\(T\)包含\(S\)的那个儿子的子树内,也就是上图中最左边的那种边,这种边是一定不会被经过的,期望是0

  所以,\(T\)和\(S\)确定的情况下,期望其实就是\(T\)包含\(S\)的那个儿子的子树大小

​   

  然后就一遍dfs,记一个\(sz[i]\)表示子树大小,\(sum[i]\)表示子树内每个点成为入口的概率总和,统计答案就好了

  

  代码大概长这样

#include<iostream>
#include<cstdio>
#include<cstring>
#define db double
using namespace std;
const int MAXN=1e5+10;
struct xxx{
int y,nxt;
}a[MAXN*2];
int h[MAXN],sz[MAXN];
db pen[MAXN],pex[MAXN],sum[MAXN];
int n,m,tot;
db ans,sumen,sumex;
void add(int x,int y);
void dfs(int fa,int x); int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
int x,y;
scanf("%d",&n);
memset(h,-1,sizeof(h));
tot=0;
for (int i=1;i<n;++i){
scanf("%d%d",&x,&y);
add(x,y); add(y,x);
}
sumex=0; sumex=0;
for (int i=1;i<=n;++i){
scanf("%lf%lf",&pen[i],&pex[i]);
sumen+=pen[i];
sumex+=pex[i];
}
ans=0;
dfs(0,1);
printf("%.15lf\n",ans/sumen/sumex);
} void add(int x,int y){
a[++tot].y=y; a[tot].nxt=h[x]; h[x]=tot;
} void dfs(int fa,int x){
int u;
sz[x]=1; sum[x]=pen[x];
for (int i=h[x];i!=-1;i=a[i].nxt){
u=a[i].y;
if (u==fa) continue;
dfs(x,u);
sz[x]+=sz[u];
sum[x]+=sum[u];
ans+=pex[x]*sum[u]*sz[u];
}
ans+=pex[x]*(sumen-sum[x])*(n-sz[x]);
}

最新文章

  1. 网页提交中文到WEB容器的经历了些什么过程....
  2. 详细解说 STL 排序(Sort)
  3. 深度理解Jquery 中 offset() 方法
  4. JavaWeb开发学习(一)-JavaWeb开发概述
  5. 关于使用 Connect-Busboy 实现文件上传 优化说明
  6. asp.net EasyUI DataGrid 实现增删改查
  7. Laravel框架——任务调度(cron)
  8. 协议系列之HTTP协议
  9. 【甘道夫】Hive 0.13.1 on Hadoop2.2.0 + Oracle10g部署详细解释
  10. 简述ConCurrentHashMap
  11. io.undertow.websockets.jsr.ServerWebSocketContainer cannot be cast to org.apache.tomcat.websocket.server.WsServerContainer
  12. (二 -4) 天猫精灵接入Home Assistant-自动发现Mqtt设备--传感器系列
  13. JWTtoken的原理以及在django中的应用
  14. html模板实现银幕滚动效果&lt;marquee&gt;标签使用
  15. 监控MySQL服务器主从同步异常的脚本,出现异常,报警
  16. 数据挖掘Apriori算法——学习笔记
  17. 如何借助 OVN 来提高 OVS 在云计算环境中的性能
  18. Python标准库笔记(5) — sched模块
  19. 那些H5用到的技术(3)——屏幕场景滑动
  20. NMAP-高级用法

热门文章

  1. 测试面试必会sql(1)
  2. GitHub 多人协作开发 三种方式:
  3. “错误: 编码GBK的不可映射字符” 的解决方案
  4. Keepalived两节点出现双VIP的情况
  5. vsftpd安装配置虚拟用户
  6. mtv网站架构模式适合企业网站应用吗?
  7. php爬虫学习笔记1 PHP Simple HTML DOM Parser
  8. 冲刺ing-2
  9. Python:列表操作总结
  10. 项目Beta冲刺(团队)第二天