HDU - 4035 Maze(概率dp)
题目链接:点击查看
题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是:
- k[ i ] :在点 i 有 k[ i ] 的几率死亡,复活到点 1
- e[ i ] :在点 i 有 e[ i ] 的几率逃生
- 1 - k[ i ] - e[ i ] :等概率经过周围的边到达相邻的点
问从点 1 开始逃生的期望步数
题目分析:
树形dp维护一下概率dp所需要的变量即可,记得特判无解的情况,有个小坑就是会卡精度,eps调成 1e-9 或 1e-10 才能过
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e4+100;const double eps=1e-10;int sgn(double x)
{if(fabs(x)<eps)return 0;if(x<0)return -1;else return 1;
}vector<int>node[N];double k[N],e[N],t[N],A[N],B[N],C[N];void init(int n)
{for(int i=1;i<=n;i++)node[i].clear();
}bool dfs(int u,int fa)
{int m=node[u].size();A[u]=k[u];B[u]=t[u]/m;C[u]=t[u];double temp=0;for(auto v:node[u]){if(v==fa)continue;if(!dfs(v,u))return false;A[u]+=t[u]/m*A[v];C[u]+=t[u]/m*C[v];temp+=t[u]/m*B[v];}if(sgn(1-temp)==0)return false;A[u]/=(1-temp);B[u]/=(1-temp);C[u]/=(1-temp);return true;
}int main()
{
#ifndef ONLINE_JUDGE
// freopen("data.in.txt","r",stdin);
// freopen("data.out.txt","w",stdout);
#endif
// ios::sync_with_stdio(false);int w;cin>>w;int kase=0;while(w--){int n;scanf("%d",&n);init(n);for(int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);node[u].push_back(v);node[v].push_back(u);}for(int i=1;i<=n;i++){scanf("%lf%lf",k+i,e+i);k[i]/=100;e[i]/=100;t[i]=1-k[i]-e[i];}if(dfs(1,-1)&&sgn(1-A[1])!=0)printf("Case %d: %.10f\n",++kase,C[1]/(1-A[1]));elseprintf("Case %d: impossible\n",++kase);}return 0;
}
HDU - 4035 Maze(概率dp)相关推荐
- HDU-4035 Maze 概率DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4035 很不错的概率DP题目,因为这题是无向图,所以要对叶节点和非叶节点考虑,然后列出方程后,因为数据很 ...
- hdu 3853 LOOPS 概率DP
简单的概率DP入门题 代码如下: 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 ...
- HDU 4035 Maze(树形概率DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4035 题意:一棵树,从结点1出发,在每个结点 i 都有3种可能:(1)回到结点1 , 概率 Ki:(2 ...
- HDU 4035 Maze
Maze http://acm.hdu.edu.cn/showproblem.php?pid=4035 分析: 在树上走来走去,然后在一个点可以k的概率回到1,可以e的概率走出去,可以1-k-e的概率 ...
- LOOPS HDU - 3853 (概率dp):(希望通过该文章梳理自己的式子推导)
题意:就是让你从(1,1)走到(r, c)而且每走一格要花2的能量,有三种走法:1,停住.2,向下走一格.3,向右走一格.问在一个网格中所花的期望值. 首先:先把推导动态规划的基本步骤给出来. · 1 ...
- 线性代数五之高斯消元——[SDOI2010]外星千足虫,[HNOI2013]游走,[HNOI2011]XOR和路径,[hdu 4035]Maze
多类型高斯消元杂题 [SDOI2010]外星千足虫 description solution code [HNOI2013]游走 description solution code [HNOI2011 ...
- LOOPS HDU - 3853(概率dp,期望)
题意: 有一个R*C的方格.一个人想从(1,1)走到(r,c).在每个格子都有三种选择,向下,向右,或者原地不动.每个格子里的每个选择都有一定的概率.而每次移动都需要消耗2点的能量,问期望消耗的能量是 ...
- hdu 3853 LOOPS (概率dp 逆推求期望)
题目链接 LOOPS Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Tot ...
- 【原创】概率DP总结 by kuangbin
概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...
最新文章
- 关于Rocchio算法和向量空间模型反馈
- hdu 5340(manacher+枚举)
- 2/2 pymysql:基础操作总结
- php __FILE__,__CLASS__等魔术变量,及实例
- 信息学奥赛一本通 2006:【20CSPJ普及组】表达式 | 洛谷 P7073 [CSP-J2020] 表达式
- linux修改last权限,Linux常用命令2/3(有关用户、权限管理的命令)--Unix/Linux操作系统04...
- SAP UI5 控件库里 Form 控件和 SimpleForm 控件的区别和联系讲解试读版
- Apache Tomcat 安装配置图文详细教程
- python记忆口诀-最良心的软件可以良心到什么程度?
- 三菱je -c中映射表的作用_如何将三菱PLC程序转换成欧姆龙PLC程序?
- elasticsearch 支持中英文搜索和混合搜索
- 视频网关是什么,视频接入网关技术作用
- 商务个人邮箱、VIP邮箱哪个最好用?外贸安全邮箱又怎么选?
- 2023首届西安浐灞·保利戏剧节——以“觅”为主题 即将开启
- 华为朗读屏幕怎么关闭
- windows网络编程 ---网络聊天室(1)
- Android入门一:搭建Java开发环境
- 淘宝商品比价定向爬虫-Python网络爬虫与信息提取-北京理工大学嵩天教授
- 神经网络 深度神经网络,主流的神经网络的框架
- 掘金万亿母婴市场,宝宝树价值在哪里? | 一点财经
热门文章
- dr.com linux源码安装,Linux在不采用坑爹的Dr.com客户端下的连网方式(亲测可行 ,简单易行)...
- powerdns mysql_安装PowerDNS(使用MySQL后端)和Poweradmin在Debian Lenny
- Nacos源码发送心跳
- SpringSecurity加密认证
- ConcurrentHashMap的源码分析-put方法第二阶段
- Synchronized结合Java Object对象中的 wait,notify,notifyAll
- 高仿真的类-AbstractApplicationContext
- 什么是springboot框架
- 依赖注入_引用其他的bean
- 算术运算符_四则与取模运算