转:https://www.cnblogs.com/kuangbin/archive/2012/10/03/2711108.html

题意:
有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树,
从结点1出发,开始走,在每个结点i都有3种可能:
1.被杀死,回到结点1处(概率为ki)
2.找到出口,走出迷宫 (概率为ei)
3.和该点相连有m条边,随机走一条
求:走出迷宫所要走的边数的期望值。

设 E[i]表示在结点i处,要走出迷宫所要走的边数的期望。E[1]即为所求。

叶子结点:
E[i] = ki*E[1] + ei*0 + (1-ki-ei)*(E[father[i]] + 1);
= ki*E[1] + (1-ki-ei)*E[father[i]] + (1-ki-ei);

非叶子结点:(m为与结点相连的边数)
E[i] = ki*E[1] + ei*0 + (1-ki-ei)/m*( E[father[i]]+1 + ∑( E[child[i]]+1 ) );
= ki*E[1] + (1-ki-ei)/m*E[father[i]] + (1-ki-ei)/m*∑(E[child[i]]) + (1-ki-ei);

设对每个结点:E[i] = Ai*E[1] + Bi*E[father[i]] + Ci;

对于非叶子结点i,设j为i的孩子结点,则
∑(E[child[i]]) = ∑E[j]
= ∑(Aj*E[1] + Bj*E[father[j]] + Cj)
= ∑(Aj*E[1] + Bj*E[i] + Cj)
带入上面的式子得
(1 - (1-ki-ei)/m*∑Bj)*E[i] = (ki+(1-ki-ei)/m*∑Aj)*E[1] + (1-ki-ei)/m*E[father[i]] + (1-ki-ei) + (1-ki-ei)/m*∑Cj;
由此可得
Ai = (ki+(1-ki-ei)/m*∑Aj) / (1 - (1-ki-ei)/m*∑Bj);
Bi = (1-ki-ei)/m / (1 - (1-ki-ei)/m*∑Bj);
Ci = ( (1-ki-ei)+(1-ki-ei)/m*∑Cj ) / (1 - (1-ki-ei)/m*∑Bj);

对于叶子结点
Ai = ki;
Bi = 1 - ki - ei;
Ci = 1 - ki - ei;

从叶子结点开始,直到算出 A1,B1,C1;

E[1] = A1*E[1] + B1*0 + C1;
所以
E[1] = C1 / (1 - A1);
若 A1趋近于1则无解...+

  1. /*
  2. HDU 4035
  3.  
  4. dp求期望的题。
  5. 题意:
  6. 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树,
  7. 从结点1出发,开始走,在每个结点i都有3种可能:
  8. 1.被杀死,回到结点1处(概率为ki)
  9. 2.找到出口,走出迷宫 (概率为ei)
  10. 3.和该点相连有m条边,随机走一条
  11. 求:走出迷宫所要走的边数的期望值。
  12.  
  13. 设 E[i]表示在结点i处,要走出迷宫所要走的边数的期望。E[1]即为所求。
  14.  
  15. 叶子结点:
  16. E[i] = ki*E[1] + ei*0 + (1-ki-ei)*(E[father[i]] + 1);
  17. = ki*E[1] + (1-ki-ei)*E[father[i]] + (1-ki-ei);
  18.  
  19. 非叶子结点:(m为与结点相连的边数)
  20. E[i] = ki*E[1] + ei*0 + (1-ki-ei)/m*( E[father[i]]+1 + ∑( E[child[i]]+1 ) );
  21. = ki*E[1] + (1-ki-ei)/m*E[father[i]] + (1-ki-ei)/m*∑(E[child[i]]) + (1-ki-ei);
  22.  
  23. 设对每个结点:E[i] = Ai*E[1] + Bi*E[father[i]] + Ci;
  24.  
  25. 对于非叶子结点i,设j为i的孩子结点,则
  26. ∑(E[child[i]]) = ∑E[j]
  27. = ∑(Aj*E[1] + Bj*E[father[j]] + Cj)
  28. = ∑(Aj*E[1] + Bj*E[i] + Cj)
  29. 带入上面的式子得
  30. (1 - (1-ki-ei)/m*∑Bj)*E[i] = (ki+(1-ki-ei)/m*∑Aj)*E[1] + (1-ki-ei)/m*E[father[i]] + (1-ki-ei) + (1-ki-ei)/m*∑Cj;
  31. 由此可得
  32. Ai = (ki+(1-ki-ei)/m*∑Aj) / (1 - (1-ki-ei)/m*∑Bj);
  33. Bi = (1-ki-ei)/m / (1 - (1-ki-ei)/m*∑Bj);
  34. Ci = ( (1-ki-ei)+(1-ki-ei)/m*∑Cj ) / (1 - (1-ki-ei)/m*∑Bj);
  35.  
  36. 对于叶子结点
  37. Ai = ki;
  38. Bi = 1 - ki - ei;
  39. Ci = 1 - ki - ei;
  40.  
  41. 从叶子结点开始,直到算出 A1,B1,C1;
  42.  
  43. E[1] = A1*E[1] + B1*0 + C1;
  44. 所以
  45. E[1] = C1 / (1 - A1);
  46. 若 A1趋近于1则无解...
  47.  
  48. */
  49. #include<stdio.h>
  50. #include<string.h>
  51. #include<algorithm>
  52. #include<iostream>
  53. #include<math.h>
  54. #include<vector>
  55. using namespace std;
  56. const int MAXN=;
  57. const double eps=1e-;//这里1e-8会WA。设为1e-9和1e-10可以
  58. double k[MAXN],e[MAXN];
  59. double A[MAXN],B[MAXN],C[MAXN];
  60.  
  61. vector<int>vec[MAXN];//存树
  62.  
  63. bool dfs(int t,int pre)//t的根结点是pre
  64. {
  65. int m=vec[t].size();//点t的度
  66. A[t]=k[t];
  67. B[t]=(-k[t]-e[t])/m;
  68. C[t]=-k[t]-e[t];
  69. double tmp=;
  70. for(int i=;i<m;i++)
  71. {
  72. int v=vec[t][i];
  73. if(v==pre)continue;
  74. if(!dfs(v,t))return false;
  75. A[t]+=(-k[t]-e[t])/m*A[v];
  76. C[t]+=(-k[t]-e[t])/m*C[v];
  77. tmp+=(-k[t]-e[t])/m*B[v];
  78. }
  79. if(fabs(tmp-)<eps)return false;
  80. A[t]/=(-tmp);
  81. B[t]/=(-tmp);
  82. C[t]/=(-tmp);
  83. return true;
  84. }
  85. int main()
  86. {
  87. int T;
  88. int n;
  89. int u,v;
  90. int iCase=;
  91. scanf("%d",&T);
  92. while(T--)
  93. {
  94. iCase++;
  95. scanf("%d",&n);
  96. for(int i=;i<=n;i++)vec[i].clear();
  97. for(int i=;i<n;i++)
  98. {
  99. scanf("%d%d",&u,&v);
  100. vec[u].push_back(v);
  101. vec[v].push_back(u);
  102. }
  103. for(int i=;i<=n;i++)
  104. {
  105. scanf("%lf%lf",&k[i],&e[i]);
  106. k[i]/=;
  107. e[i]/=;
  108. }
  109. printf("Case %d: ",iCase);
  110. if(dfs(,-)&&fabs(-A[])>eps)
  111. {
  112. printf("%.6lf\n",C[]/(-A[]));
  113. }
  114. else printf("impossible\n");
  115. }
  116. }

HDU4035 Maze (概率DP)的更多相关文章

  1. hdu4035 Maze (树上dp求期望)

    dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点1处(概率为ki) 2.找到出口,走出迷宫 ...

  2. HDU4035 Maze 期望DP+树形DP(好题)

    题意:有一个树形的迷宫,有N个房间(标号为1~N)以及N-1条通道将它们连通,一开始在1号房间,每进入一个房间i,有k[i]的概率被陷阱杀死回到房间1,有s[i]的概率找到出口逃离迷宫,如果没有找到出 ...

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

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

  4. hdu 4035 Maze 概率DP

        题意:    有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树,    从结点1出发,开始走,在每个结点i都有3种可能:        1.被杀死,回到结点1处(概率为ki)      ...

  5. hdu4035(概率dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4035 题意:有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结 ...

  6. HDU 4035 Maze 概率DP 搜索

    解题报告链接: http://www.cnblogs.com/kuangbin/archive/2012/10/03/2711108.html 先推公式,设计状态,令DP[i]表示在房间i退出要走步数 ...

  7. HDU4035 Maze(期望DP)

    题意 抄袭自https://www.cnblogs.com/Paul-Guderian/p/7624039.html 有n个房间,由n-1条隧道连通起来,形成一棵树,从结点1出发,开始走,在每个结点i ...

  8. A Dangerous Maze (II) LightOJ - 1395(概率dp)

    A Dangerous Maze (II) LightOJ - 1395(概率dp) 这题是Light Oj 1027的加强版,1027那道是无记忆的. 题意: 有n扇门,每次你可以选择其中一扇.xi ...

  9. 【整理】简单的数学期望和概率DP

    数学期望 P=Σ每一种状态*对应的概率. 因为不可能枚举完所有的状态,有时也不可能枚举完,比如抛硬币,有可能一直是正面,etc.在没有接触数学期望时看到数学期望的题可能会觉得很阔怕(因为我高中就是这么 ...

随机推荐

  1. java中java.util.Date和java.sql.Date之间的关系和使用选择

    关系: java.util.Date是java.sql.Date的父类 区别:(java.sql.Date包含年月日信息,java.util.Date包含年月日时分秒) 1:“规范化”的java.sq ...

  2. python-backports.ssl-match-hostname 安装问题

    转载请标明本文链接:(https://www.cnblogs.com/softwarecb/p/python-backports-ssl.html) 系统版本Ubuntu14.04 因为要用Conta ...

  3. 【SQL Server复制】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?

    转自:https://www.cnblogs.com/happyday56/p/3849018.html 关键字:sql server复制 [SQL Server高可用性]数据库复制:修改表结构.新增 ...

  4. [BNDSOJ] #1106代码

    #include<bits/stdc++.h> using namespace std; ]; ][]; int n; bool check(int i,int j) { ]==]==]= ...

  5. Segment tree Beats

    Segment tree Beats Segment tree Beats,吉司机线段树,主要是关于如何用线段树实现区间取min/max.我们先看一道例题: HDU5306 Gorgeous Sequ ...

  6. 使用pdfobject.js实现在线浏览PDF

    1.pdfobject.js官网:https://pdfobject.com/ 2.在html文件中引入这个文件,以pdfobject.min.js为例 <script type="t ...

  7. MVC的view页面内嵌C#语法发现路径被转码的解决方法

    一,上视图代码,如下 console.log('@urlquery.ToString()'); console.log('@Html.Raw(urlquery.ToString())'); 二,显示结 ...

  8. python实现不同条件下单据体的颜色不一样,比如直接成本分析表中关闭的细目显示为黄色

    #引入clr运行库 import clr #添加对cloud插件开发的常用组件的引用 clr.AddReference('Kingdee.BOS') clr.AddReference('Kingdee ...

  9. 1144. The Missing Number (20)

    Given N integers, you are supposed to find the smallest positive integer that is NOT in the given li ...

  10. jmeter中遇见的坑:url需要编码的

    在postman中能请求成功,但是在jmeter就是请求失败报500错. 请求的 url  :/graph/vertices?label=node&properties={"num& ...