HDU 4035 Maze(树形概率DP)
题目链接: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)的更多相关文章
- hdu 5094 Maze 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...
- 【BZOJ 2878】 2878: [Noi2012]迷失游乐园 (环套树、树形概率DP)
2878: [Noi2012]迷失游乐园 Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m ...
- 【bzoj3566】[SHOI2014]概率充电器 树形概率dp
题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的 ...
- HDU 4035:Maze(概率DP)
http://acm.split.hdu.edu.cn/showproblem.php?pid=4035 Maze Special Judge Problem Description When w ...
- 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< ...
- HDU 4089 Activation(概率DP)(转)
11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况. 像概率dp,公式推出来就很容易写 ...
- HDU 4405 Aeroplane chess (概率DP)
题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i 这个位置到达 n ...
- 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 ...
- HDU 4035 Maze 概率dp,树形dp 难度:2
http://acm.hdu.edu.cn/showproblem.php?pid=4035 求步数期望,设E[i]为在编号为i的节点时还需要走的步数,father为dfs树中该节点的父节点,son为 ...
随机推荐
- hdu2768-Cat vs. Dog:图论:二分匹配
Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Linux下的文件查找类命令(转载)
如何快速有效的定位文件系统内所需要查找的文件呢?Linux为我们提供了一些文件查找类的命令,我们需要掌握以下几个命令: http://blog.csdn.net/sailor201211/articl ...
- 搭建Android环境
1.相关文件下载: 1.1.Java jdk下载: JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jre7-downl ...
- Android--------- SD卡存储文件报错解决
##文件找不到 1.没有写write权限 2.没有判断文件夹是否存在,不存在则创建
- 服务器安装VMware ESXI5.5
一.VMware ESXI5.5 vSphere5.5 VIMSetup下载http://blog.sina.com.cn/s/blog_61c07ac50101gy64.html(1)VMware安 ...
- iPhoneKeyboard
iPhoneKeyboard.Open static function Open (text : string, keyboardType : iPhoneKeyboardType = iPhoneK ...
- 访问MySQL数据库时,报“找不到请求的 .net Framework 数据提供程序。可能没有安装。”的解决方案
最近开发了一个系统,在测试环境上进行部署(win7环境)并测试,没有发现问题:但是把系统部署到win Server2008R2上之后,部分页面就报“找不到请求的 .net Framework 数据提供 ...
- PHP上传文件DEMO
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <html> <head> ...
- hdu Red and Black
算法:深搜 题意:就是让你找到一共可以移动多少次,每次只能移到黑色格子上, Problem Description There is a rectangular room, covered with ...
- jquery简单的拖动效果
<!DOCTYPE html> <html> <meta http-equiv="Content-Type" content="text/h ...