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]);
}

【CF123E】Maze的更多相关文章

  1. 【hdu4035】Maze

    Portal --> hdu4035 Solution 讲道理不是很懂为啥概d那么喜欢走迷宫qwq (推式子推的很爽的一题?) 首先大力dp列式子 用\(f[i]\)表示从\(i\)到离开的期望 ...

  2. 【XSY2525】Maze 2017多校

    Description 考虑一个 N×M 的网格,每个网格要么是空的,要么是障碍物.整个网格四周都是墙壁(即第1行和第n行,第1列和第m列都是墙壁),墙壁有且仅有两处开口,分别代表起点和终点.起点总是 ...

  3. 【南京邮电】maze 迷宫解法

    [南京邮电]maze 迷宫解法 题目来源:南京邮电大学网络攻防训练平台. 题目下载地址:https://pan.baidu.com/s/1i5gLzIt (密码rijss) 0x0 初步分析 题目中给 ...

  4. 【】maze

    [链接]点击打开链接 [题意] 小 T 被放到了一个迷宫之中,这个迷宫由 n 个节点构成,两个节点之间可能存在多条无 向边,小 T 的起点为 1 号节点,终点为 n 号节点.有 m 条无向边,对于每一 ...

  5. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  6. 【bfs】迷宫问题

    [题目描述] 定义一个二维数组: int maze[5][5] = { 0,1,0,0,0, 0,1,0,1,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,1,0, }; 它表示一个迷 ...

  7. 【HDOJ图论题集】【转】

    =============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...

  8. 【LeetCode】深搜DFS(共85题)

    [98]Validate Binary Search Tree [99]Recover Binary Search Tree [100]Same Tree [101]Symmetric Tree [1 ...

  9. 【LeetCode】BFS(共43题)

    [101]Symmetric Tree 判断一棵树是不是对称. 题解:直接递归判断了,感觉和bfs没有什么强联系,当然如果你一定要用queue改写的话,勉强也能算bfs. // 这个题目的重点是 比较 ...

随机推荐

  1. openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一

    openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...

  2. gets函数的完美替代

    众所周知 在C语言中scanf用来读取一行字符串时遇到空格或回车会停止 而若要读入一行带空格的字符串时 有些人会用gets来代替 然而,gets的最大问题在于:会读取超过数组长度上限个字符,而超出长度 ...

  3. SpringMVC Controller介绍及常用注解——@Controller

    一 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model ...

  4. Centos7 Zabbix添加主机、图形、触发器

    制作自定义key zabbix自带模板Template OS Linux (Template App Zabbix Agent)提供CPU.内存.磁盘.网卡等常规监控,只要新加主机关联此模板,就可自动 ...

  5. Linux下文件的打包、解压缩指令——tar,gzip,bzip2

    本文是对 鸟叔的Linux私房菜(基础学习篇) 第三版 的学习笔记,原文可参考原书中文网站 鸟叔的Linux私房菜.更多详细信息可直接参考对应Linux命令的 man 帮助( 如 man tar). ...

  6. Live Archive 训练题 2019/3/9

    7454 Parentheses A bracket is a punctuation mark, which is used in matched pairs, usually used withi ...

  7. postman的巨坑 之 cookie

    问题描述:一个后端接口,该接口需要校验登录态,登录态通过cookie中的一个传参k判断.在保证登录的前提下,调用机器A上的接口一直报“用户未登录”,调机器B上就没问题,于是开始排查问题. 解决过程: ...

  8. Android开发第二阶段(7)

    今天:对项目的最后总结,宣传给下届学生做准备.为了更好的了解和深入书写本次项目的总结随笔.

  9. 团队Alpha冲刺(四)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:何家伟 组员8:政演 组员9:鸿杰 组员10:刘一好 组员:何宇恒 展示组内最新 ...

  10. java第九周笔记