HDU 4035 Maze
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相关推荐
- HDU 4035 Maze(树形概率DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4035 题意:一棵树,从结点1出发,在每个结点 i 都有3种可能:(1)回到结点1 , 概率 Ki:(2 ...
- 线性代数五之高斯消元——[SDOI2010]外星千足虫,[HNOI2013]游走,[HNOI2011]XOR和路径,[hdu 4035]Maze
多类型高斯消元杂题 [SDOI2010]外星千足虫 description solution code [HNOI2013]游走 description solution code [HNOI2011 ...
- HDU - 4035 Maze(概率dp)
题目链接:点击查看 题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是: k[ i ] :在点 i 有 k[ i ...
- hdu 4035 可能性DP 成都网络游戏
http://acm.hdu.edu.cn/showproblem.php?pid=4035 获得: 1.首先推断是不是树.事实上,所有的感觉身影,既看边数==算-1是不成立 2.有时候,我告诉孩子来 ...
- poj 2096 , zoj 3329 , hdu 4035 —— 期望DP
题目:http://poj.org/problem?id=2096 题目好长...意思就是每次出现 x 和 y,问期望几次 x 集齐 n 种,y 集齐 s 种: 所以设 f[i][j] 表示已经有几种 ...
- hdu 5094 Maze
题意: n*m大的迷宫 ,有p种钥匙.钥匙最多有10种. 然后一个k,然后k行表示 (x1,y1),(x2,y2)直接有门或者墙. 如果g==0 ,就是有墙, 如果g>0 表示有门,且门需要第g ...
- hdu 5094 Maze bfs
传送门:上海邀请赛E 给定一个n×m的迷宫,给出相邻格子之间的墙或者门的信息,墙说明不可走,假设是门则须要有相应的钥匙才干通过,问是否可以从(1,1)到达(n,m) 一个带状态的bfs,再另记一个状态 ...
- 【原创】概率DP总结 by kuangbin
概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...
- 关于概率dp的个人理解与总结
原文来自:http://blog.csdn.net/wdcjdtc/article/details/38424029 首先,概率dp主要解决的是关于概率问题和期望问题的求解. 难点和普通dp一样在于d ...
最新文章
- Docker教程-仓库管理
- ubuntu 18.04.1 使用心得
- Atitit.每周计划日程表 流程表v3
- PCL学习笔记02:在ROS下建立编译链接PCL模块
- 6410的系统时钟设置(上)---6410时钟控制逻辑框架分析
- 计算机不能直接执行c语言编写的源程序,计算机不能直接执行用C语言编写的源程序。...
- 百面机器学习!算法工程师面试宝典!| 码书
- KNN算法(10折交叉验证)
- 详细解析机组中的存储单元 存储字 存储字长
- 读书笔记:《关于上班这件事--自序·朱德庸》
- polplayer下载网址和polplayer直播源
- sklearn.svm.SVC的方法decision_function_shape:ovr 或者 ovo
- sd卡tf卡进入spi模式
- configure配置调试
- 【西语】【3】Tu papa es pirata, o por que eres un tesoro 你爸爸是海盗吗,不然为什么你是个宝藏
- C语言:添加和显示,数据保存在文件中,下次打开可以获取之前录入的内容
- 用计算机打字教案,《打字机》教案
- Linux环境下内存泄露检测
- 吐槽 | 参加IT培训的正确姿势
- python刷今日头条阅读量_用python3.5逛看今日头条
热门文章
- 从sqlserver中数据写入mysql_从SQL server数据库导入Mysql数据库的体验
- Request对象及其API应用实操
- 计算机专业实训计划,计算机专业实习计划范文
- python性能分析工具_Python Profilers 分析器
- java中文本框显示在命令按钮后面_Maya中Pymel写个带界面的重命名工具(一)
- 实现tinyc语言的扫描程序_适合编程小白的C语言设计习题,实现自动发牌程序!源码分享!...
- bazel 链接第三方动态库_惠州权威信息系统安全检测第三方
- python小爬虫(爬取职位信息和博客文章信息)
- Spring MVC 基于注解的class文件打成jar包后注入失败
- [机器学习] 常用并行计算算子原理