题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4035

题意:一棵树,从结点1出发,在每个结点 i 都有3种可能:(1)回到结点1 , 概率 Ki;(2)结束,概率 Ei;(3)随机走一条边。(ki+ei+随机走=1) 求到结束需要走的边数的期望。

假设E[i]为点i到结束走边数的期望,则有

(以下m为点的度数)

E[i]=ki*E[1]+(1-ei-ki)/m*(E[fa[i]]+1)若i为叶子节点.

=ki*E(1)+(1-ki-ei)*E(father)+(1-ki-ei)

E[i]=ki*E[1]+(1-ei-ki)/m*(E[fa[i]]+1)+(1-ei-ki)/m*(Sum(E[son[i]]+1))i不为叶子节点

=ki*E(1)+(1-ki-ei)/m *E(father)+(1-ki-ei)/m*SUM(E(child))+(1-ki-ei)  作为1式

我们发现,这样求非常麻烦,若是n小一点大可用高斯消元求解,可这题的n为10000,无法用高斯消元。

对于每个E[i],我们令E[i]=Ai*(E[1])+Bi*(E[fa[i]])+Ci

E[child]=Aj*E[1]+Bj*E[i]+Cj

Sum(E[child])=Sum(Aj*E[1]+Bj*E[i]+Cj)

带入1式:ki*E(1)+(1-ki-ei)/m *E(father)+(1-ki-ei)/m*Sum(Aj*E[1]+Bj*E[i]+Cj)+(1-ki-ei)

可得:(ki+(1-ki-ei)/m*SUM(Aj))*E(1)+(1-ki-ei)/m *E(father)+(1-ki-ei+(1-ki-ei)/m*SUM(cj))

与刚才的E[i]=Ai*(E[1])+Bi*(E[fa[i]])+Ci对比一下发现:

Ai=(ki+(1-ki-ei)/m*SUM(Aj))

Bi=(1-ki-ei)/m

Ci=(1-ki-ei+(1-ki-ei)/m*SUM(cj))

对于叶子节点,有

Ai=ki

Bi=1-ki-ei

Ci=1-ki-ei

倒推即可,还有,

E(1)=A1*E(1)+B1*0+C1

E(1)=C1/(1-A1)

若是上述式子中的分母出现0则无解。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
const double eps=1e-;
int tot,go[],first[],next[];
double a[],b[],c[],k[],e[];
int n,du[];
void insert(int x,int y){tot++;go[tot]=y;next[tot]=first[x];first[x]=tot;}
void add(int x,int y){insert(x,y);insert(y,x);}
bool dfs(int x,int fa){
bool Isleave=;
double tmp=;
a[x]=k[x];
b[x]=c[x]=(-k[x]-e[x]);
b[x]/=du[x];
for (int i=first[x];i;i=next[i]){
int pur=go[i];
if (pur==fa) continue;
Isleave=;
if (!dfs(pur,x)) return false;
a[x]+=a[pur]*(-k[x]-e[x])/du[x];
c[x]+=c[pur]*(-k[x]-e[x])/du[x];
tmp+=(b[pur])*(-k[x]-e[x])/du[x];
}
if (fabs(tmp-)<=eps) return false;
a[x]/=(-tmp);
b[x]/=(-tmp);
c[x]/=(-tmp);
return true;
}
int main(){
int T,Tcase=;
scanf("%d",&T);
while (T--){
Tcase++;
tot=;
memset(first,,sizeof first);
memset(du,,sizeof du);
scanf("%d",&n);
for (int i=;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
du[x]++;
du[y]++;
}
for (int i=;i<=n;i++){
scanf("%lf%lf",&k[i],&e[i]);
k[i]/=;e[i]/=;
}
printf("Case %d: ",Tcase);
if (dfs(,)&&fabs(-a[])>eps){
printf("%.6f\n",c[]/(-a[]));
}
else{
printf("impossible\n");
}
}
}

HDU 4035 Maze(树形概率DP)的更多相关文章

  1. hdu 5094 Maze 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...

  2. 【BZOJ 2878】 2878: [Noi2012]迷失游乐园 (环套树、树形概率DP)

    2878: [Noi2012]迷失游乐园 Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m ...

  3. 【bzoj3566】[SHOI2014]概率充电器 树形概率dp

    题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的 ...

  4. HDU 4035:Maze(概率DP)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=4035 Maze Special Judge Problem Description   When w ...

  5. poj 2096 Collecting Bugs && ZOJ 3329 One Person Game && hdu 4035 Maze——期望DP

    poj 2096 题目:http://poj.org/problem?id=2096 f[ i ][ j ] 表示收集了 i 个 n 的那个. j 个 s 的那个的期望步数. #include< ...

  6. HDU 4089 Activation(概率DP)(转)

    11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况.   像概率dp,公式推出来就很容易写 ...

  7. HDU 4405 Aeroplane chess (概率DP)

    题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i  这个位置到达 n ...

  8. HDU - 5001 Walk(概率dp+记忆化搜索)

    Walk I used to think I could be anything, but now I know that I couldn't do anything. So I started t ...

  9. HDU 4035 Maze 概率dp,树形dp 难度:2

    http://acm.hdu.edu.cn/showproblem.php?pid=4035 求步数期望,设E[i]为在编号为i的节点时还需要走的步数,father为dfs树中该节点的父节点,son为 ...

随机推荐

  1. LeetCode_Combination Sum II

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...

  2. 如何用VS2010打开VS2012编辑的项目

    找到打开项目的开始图标:,右键点击,选择有文本编辑器打开,用下面的语句将文件里面的前两句替换掉.​Microsoft Visual Studio Solution File, Format Versi ...

  3. 程序错误[C/C++]

    对于初学者而言,一般意义上,程序错误可以分为两类,逻辑错误和非逻辑错误.前者是指,程序可以通过编译或链接但运行时不符合预期结果,后者是程序不能通过编译或链接. 乍一看这样的分类非常清楚.不过,当引入语 ...

  4. poj 2100 Graveyard Design(尺取法)

    Description King George has recently decided that he would like to have a new design for the royal g ...

  5. js高级程序设计(第三版)学习笔记(第一版)

    ecma:欧洲计算机制造商协会iso/iec:国际标准化和国际电工委员会 dom级别(10*)文档对象模型1:DOM核心(映射基于xml文档)与dom html(在dom核心基础上)2:对鼠标,事件, ...

  6. css如何使背景图片水平居中

    CSS中定位背景图片的属性是:background-position,用法background-position 属性设置背景图像的起始位置. 你要水平居中可以: div{background-pos ...

  7. SecureCRT 安装及初始化配置

    安装 SecureCRT 7.3.4 安装以及破解方法 SecureCRT 6.5.0 汉化解压版 初始化配置 这里配置以SecureCRT 6.5.0 汉化解压版为例 1.调整SecureCRT终端 ...

  8. kendo ui中grid页面参数问题

    kendo ui 中grid 算是最长用的控件之一,当使用分页效果时,我们要传递分页参数与自己定义的参数如: var dataSource = new kendo.data.DataSource({ ...

  9. Spring Ldap 的增删改查

    package ldap.entity; /** * 本测试类person对象来自schema文件的core.schema文件 * objectClass为person,必填属性和可选属性也是根据该对 ...

  10. Oracle 中按条件过滤重复记录

    在数据处理中,经常会遇到类似这样的情况:数据库中存在多条记录,其中某些字段值相同,其他字段值不同.实际的业务需要针对这样的情况,只保留一条数据,其他数据删除.如何做到呢?在sql中有top关键字相对容 ...