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