Maze

http://acm.hdu.edu.cn/showproblem.php?pid=4035

分析:

  在树上走来走去,然后在一个点可以k的概率回到1,可以e的概率走出去,可以1-k-e的概率走到其他的位置(分为父节点和子节点讨论)。

  转移方程就是:$dp[i] = dp[1] \times k + 0 \times e + \frac{1 - k - e}{deg[i]} \times (dp[fa]+1) + \sum\limits_{j∈child[i]}\frac{1 - k - e}{deg[i]} \times (dp[j]+1)$

  发现式子没法转换,有后效性,然后式子只与$dp[1],dp[fa],dp[child[i]]$有关系,可以写成统一的格式:$dp[i] = A_i \times dp[1] +B_i \times dp[fa] +C_i$

  这样写完了,发现$A,B,C$就可以从它的子节点转移了,然后可以从叶子节点推到根。最后$dp[1] = \frac{C[1]}{1-A[1]}$。

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

代码:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<iostream>
 6 #include<cctype>
 7 #include<set>
 8 #include<vector>
 9 #include<queue>
10 #include<map>
11 using namespace std;
12 typedef long long LL;
13
14 inline int read() {
15     int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
16     for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
17 }
18
19 const int N = 10010;
20 const double eps =  1e-10;
21
22 double A[N], B[N], C[N], k[N], e[N];
23 vector<int> T[N];
24
25 bool dfs(int u,int fa) {
26     double m = 1.0 * T[u].size();
27     A[u] = k[u], B[u] = (1 - k[u] - e[u]) / m, C[u] = 1 - k[u] - e[u];
28     double t = 0;
29     for (int i=0; i<m; ++i) {
30         int v = T[u][i];
31         if (v == fa) continue;
32         if (!dfs(v, u)) return false;
33         A[u] += (1 - k[u] - e[u]) / m * A[v];
34         C[u] += (1 - k[u] - e[u]) / m * C[v];
35         t += (1 - k[u] - e[u]) / m * B[v];
36     }
37     if (fabs(1 - t) <= eps) return false;
38     A[u] /= (1 - t), B[u] /= (1 - t), C[u] /= (1 - t);
39     return true;
40 }
41
42 int main() {
43     for (int Case=read(),t=1; t<=Case; ++t) {
44         int n = read();
45         for (int i=1; i<=n; ++i) T[i].clear();
46         for (int i=1; i<n; ++i) {
47             int u = read(), v = read();
48             T[u].push_back(v), T[v].push_back(u);
49         }
50         for (int i=1; i<=n; ++i) {
51             int a = read(), v = read();
52             k[i] = (double)a / 100.0;
53             e[i] = (double)v / 100.0;
54         }
55         printf("Case %d: ",t);
56         if (dfs(1, 0) && fabs(A[1] - 1) > eps)
57             printf("%.10lf\n",C[1] / (1 - A[1]));
58         else puts("impossible");
59     }
60     return 0;
61 }

转载于:https://www.cnblogs.com/mjtcn/p/9638853.html

HDU 4035 Maze相关推荐

  1. HDU 4035 Maze(树形概率DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4035 题意:一棵树,从结点1出发,在每个结点 i 都有3种可能:(1)回到结点1 , 概率 Ki:(2 ...

  2. 线性代数五之高斯消元——[SDOI2010]外星千足虫,[HNOI2013]游走,[HNOI2011]XOR和路径,[hdu 4035]Maze

    多类型高斯消元杂题 [SDOI2010]外星千足虫 description solution code [HNOI2013]游走 description solution code [HNOI2011 ...

  3. HDU - 4035 Maze(概率dp)

    题目链接:点击查看 题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是: k[ i ] :在点 i 有 k[ i ...

  4. hdu 4035 可能性DP 成都网络游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=4035 获得: 1.首先推断是不是树.事实上,所有的感觉身影,既看边数==算-1是不成立 2.有时候,我告诉孩子来 ...

  5. poj 2096 , zoj 3329 , hdu 4035 —— 期望DP

    题目:http://poj.org/problem?id=2096 题目好长...意思就是每次出现 x 和 y,问期望几次 x 集齐 n 种,y 集齐 s 种: 所以设 f[i][j] 表示已经有几种 ...

  6. hdu 5094 Maze

    题意: n*m大的迷宫 ,有p种钥匙.钥匙最多有10种. 然后一个k,然后k行表示 (x1,y1),(x2,y2)直接有门或者墙. 如果g==0 ,就是有墙, 如果g>0 表示有门,且门需要第g ...

  7. hdu 5094 Maze bfs

    传送门:上海邀请赛E 给定一个n×m的迷宫,给出相邻格子之间的墙或者门的信息,墙说明不可走,假设是门则须要有相应的钥匙才干通过,问是否可以从(1,1)到达(n,m) 一个带状态的bfs,再另记一个状态 ...

  8. 【原创】概率DP总结 by kuangbin

    概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...

  9. 关于概率dp的个人理解与总结

    原文来自:http://blog.csdn.net/wdcjdtc/article/details/38424029 首先,概率dp主要解决的是关于概率问题和期望问题的求解. 难点和普通dp一样在于d ...

最新文章

  1. Docker教程-仓库管理
  2. ubuntu 18.04.1 使用心得
  3. Atitit.每周计划日程表 流程表v3
  4. PCL学习笔记02:在ROS下建立编译链接PCL模块
  5. 6410的系统时钟设置(上)---6410时钟控制逻辑框架分析
  6. 计算机不能直接执行c语言编写的源程序,计算机不能直接执行用C语言编写的源程序。...
  7. 百面机器学习!算法工程师面试宝典!| 码书
  8. KNN算法(10折交叉验证)
  9. 详细解析机组中的存储单元 存储字 存储字长
  10. 读书笔记:《关于上班这件事--自序·朱德庸》
  11. polplayer下载网址和polplayer直播源
  12. sklearn.svm.SVC的方法decision_function_shape:ovr 或者 ovo
  13. sd卡tf卡进入spi模式
  14. configure配置调试
  15. 【西语】【3】Tu papa es pirata, o por que eres un tesoro 你爸爸是海盗吗,不然为什么你是个宝藏
  16. C语言:添加和显示,数据保存在文件中,下次打开可以获取之前录入的内容
  17. 用计算机打字教案,《打字机》教案
  18. Linux环境下内存泄露检测
  19. 吐槽 | 参加IT培训的正确姿势
  20. python刷今日头条阅读量_用python3.5逛看今日头条

热门文章

  1. 从sqlserver中数据写入mysql_从SQL server数据库导入Mysql数据库的体验
  2. Request对象及其API应用实操
  3. 计算机专业实训计划,计算机专业实习计划范文
  4. python性能分析工具_Python Profilers 分析器
  5. java中文本框显示在命令按钮后面_Maya中Pymel写个带界面的重命名工具(一)
  6. 实现tinyc语言的扫描程序_适合编程小白的C语言设计习题,实现自动发牌程序!源码分享!...
  7. bazel 链接第三方动态库_惠州权威信息系统安全检测第三方
  8. python小爬虫(爬取职位信息和博客文章信息)
  9. Spring MVC 基于注解的class文件打成jar包后注入失败
  10. [机器学习] 常用并行计算算子原理