HDU-4035-概率dp-期望-公式化简
Maze
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 3149 Accepted Submission(s): 1370
Special Judge
The maze consisted by N rooms and tunnels connecting these rooms. Each pair of rooms is connected by one and only one path. Initially, lxhgww is in room 1. Each room has a dangerous trap. When lxhgww step into a room, he has a possibility to be killed and restart from room 1. Every room also has a hidden exit. Each time lxhgww comes to a room, he has chance to find the exit and escape from this maze.
Unfortunately, lxhgww has no idea about the structure of the whole maze. Therefore, he just chooses a tunnel randomly each time. When he is in a room, he has the same possibility to choose any tunnel connecting that room (including the tunnel he used to come to that room).
What is the expect number of tunnels he go through before he find the exit?
At the beginning of each case is an integer N (2 ≤ N ≤ 10000), indicates the number of rooms in this case.
Then N-1 pairs of integers X, Y (1 ≤ X, Y ≤ N, X ≠ Y) are given, indicate there is a tunnel between room X and room Y.
Finally, N pairs of integers Ki and Ei (0 ≤ Ki, Ei ≤ 100, Ki + Ei ≤ 100, K1 = E1 = 0) are given, indicate the percent of the possibility of been killed and exit in the ith room.
3
1 2
1 3
0 0
100 0
0 100
3
1 2
2 3
0 0
100 0
0 100
6
1 2
2 3
1 4
4 5
4 6
0 0
20 30
40 30
50 50
70 10
20 60
Case 2: impossible
Case 3: 2.895522
给出一颗树,起始点为1号点,接下来可以走向任意一个与当前点连接着的点,每个点有ki%的概率被杀死和ei%的概率逃生(ki+ei<=100),被杀死后将返回1号点从新开始,问逃生成功的期望步数,如果不可能逃生成功输出impossible。注意到在每个点只有三种情况死亡,逃生或者是等概率的走向其他点,走向每个点的概率就是(1-ki-ei)/ni,ni为连接点个数。设f[i]表示在i点距离逃生成功的期望步数,我们有:
f[i]=k[i]*f[1]+e[i]*0+( (1-k[i]-e[i])/ni )*( (f[fa[i]]+1) + SUM{ f[j]+1 } )
注意到相关联的系数只有f[1],f[fa[i]]和常数C,令f[i]=A[i]*f[1]+B[i]*f[fa[i]]+C[i],代入f[j]得到
(1-SUM{ B[j] }*(1-ki-ei)/ni)*f[i]=(ki+SUM{A[j]}*(1-ki-ei)/ni)*f[1]+(1-ki-ei)/ni*f[fa[i]]+(1-ki-ei)/ni*(ni+SUM{C[j]} )
令Pi=(1-ki-ei)/ni
得到A[i]=(ki+Pi*SUM{A[j]})/(1-Pi*SUM{B[j]})
B[i]=Pi/(1-Pi*SUM{B[j]})
C[i]=Pi*(ni+SUM{C[j]})/(1-Pi*SUM{B[j]})
然后树形dp一下由叶子向父亲不断递推得到A[1]和C[1],答案就是C[1]/(1-A[1]),如果不可能逃生成功的话,1-A[1]应该趋近于零,特判一下。
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
#include<stack>
#include<set>
#include<map>
#include<cmath>
#include<ctime>
#include<time.h>
#include<algorithm>
using namespace std;
#define mp make_pair
#define pb push_back
#define debug puts("debug")
#define LL long long
#define pii pair<int,int>
#define eps 1e-10
#define inf 0x3f3f3f3f const int NN=;
double A[NN],B[NN],C[NN],f[];
double E[NN],K[NN];
vector<int>g[NN];
void dfs(int u,int fa){
int ni=g[u].size(); //临接点个数
double _A=,_B=,_C=;
for(int i=;i<g[u].size();++i){
int v=g[u][i];
if(v==fa) continue;
dfs(v,u);
_A+=A[v],_B+=B[v],_C+=C[v];
}
double P=(1.00-K[u]-E[u])/ni;
A[u]=(K[u]+P*_A)/(1.00-P*_B);
B[u]=P/(1.00-P*_B); if(u==) B[u]=;
C[u]=P*(ni+_C)/(1.00-P*_B);
}
int main()
{
int t,i,j,k,n,m,u,v;
scanf("%d",&t);
for(int cas=;cas<=t;++cas){
scanf("%d",&n);
for(i=;i<=n;++i) g[i].clear();
for(i=;i<n;++i){
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
for(i=;i<=n;++i){
scanf("%lf%lf",K+i,E+i);
K[i]/=;
E[i]/=;
}
dfs(,-);
double ans=C[]/(1.00-A[]);
if(fabs(1.00-A[])<eps) printf("Case %d: impossible\n",cas);
else printf("Case %d: %.6f\n",cas,ans);
}
return ;
}
HDU-4035-概率dp-期望-公式化简的更多相关文章
- 2017 ICPC Asia Urumqi A.coins (概率DP + 期望)
题目链接:Coins Description Alice and Bob are playing a simple game. They line up a row of nn identical c ...
- luogu P6835 概率DP 期望
luogu P6835 概率DP 期望 洛谷 P6835 原题链接 题意 n + 1个节点,第i个节点都有指向i + 1的一条单向路,现在给他们添加m条边,每条边都从一个节点指向小于等于自己的一个节点 ...
- hdu 3853 概率dp
题意:在一个R*C的迷宫里,一个人在最左上角,出口在右下角,在每个格子上,该人有几率向下,向右或者不动,求到出口的期望 现在对概率dp有了更清楚的认识了 设dp[i][j]表示(i,j)到(R,C)需 ...
- hdu 4035 可能性DP 成都网络游戏
http://acm.hdu.edu.cn/showproblem.php?pid=4035 获得: 1.首先推断是不是树.事实上,所有的感觉身影,既看边数==算-1是不成立 2.有时候,我告诉孩子来 ...
- 概率dp+期望dp 题目列表(一)
表示对概率和期望还不是很清楚定义. 目前暂时只知道概率正推,期望逆推,然后概率*某个数值=期望. 为什么期望是逆推的,例如你求到某一个点的概率我们可以求得,然后我们只要运用dp从1~n每次都加下去就好 ...
- HDU 4599 概率DP
先推出F(n)的公式: 设dp[i]为已经投出连续i个相同的点数平均还要都多少次才能到达目标状态. 则有递推式dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[1]).考虑当前这 ...
- HDU 5001 概率DP || 记忆化搜索
2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP 測 ...
- HDU 4815 概率dp,背包
Little Tiger vs. Deep Monkey Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K ( ...
- hdu 4050(概率dp)
算是挺简单的一道概率dp了,如果做了前面的聪聪于可可的话,这题不需要什么预处理,直接概率dp就行了... #include <stdio.h> #include <stdlib.h& ...
- hdu 3853 LOOPS(概率 dp 期望)
Problem Description Akemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl). Homura wants to help ...
随机推荐
- CentOS7.2升级默认yum安装的php版本
CentOS7.2yum安装php默认版本为5.4,可以升级通过yum安装更高版本 设置yum源 rpm -Uvh https://mirror.webtatic.com/yum/el7/webtat ...
- Oracle性能优化之oracle中常见的执行计划及其简单解释
一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...
- http和socket之长连接和短连接区别
TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. 在应 ...
- 详解maxlength属性在textarea里奇怪的表现
这篇文章主要介绍了maxlength属性在textarea里奇怪的表现的相关资料,需要的朋友可以参考下 HTML5给表单带来了很多改变,比如今天要说的maxlength,这个属性可以限制输入框输入的最 ...
- python修改镜像源
pip升级:python -m pip install --upgrade pip https://www.cnblogs.com/andy9468/p/10319442.html 1.在命令中临时修 ...
- 整合最优雅SSM框架:SpringMVC + Spring + MyBatis 基础
在写代码之前我们先了解一下这三个框架分别是干什么的? 相信大以前也看过不少这些概念,我这就用大白话来讲,如果之前有了解过可以跳过这一大段,直接看代码! SpringMVC:它用于web层,相当于con ...
- 1.Anaconda安装Tensorflow报错UnicodeDecodeError: 'utf-8' codec can't decode ## invalid start byte的问题之解决
安装TensorFlow pip install --ignore-installed --upgrade tensorflow 报错: UnicodeDecodeError: 'utf-8' cod ...
- [py][mx]实现按照课程机构排名,按照学习人数排名
原型是 实现效果 因为要按照这两个指标排名, 模型中现在还没有这2个字段(整数),所以需要修改模型. 修改模型,添加2个排序指标的字段 class CourseOrg(models.Model): . ...
- Selenium IDE脚本录制步骤简介
录制脚本步骤: 1.打开Selenium IDE,输入需要录制脚本的地址,然后启动Firefox,输入selenium IDE需录制的地址,根据实际需求,做相关操作: 2.录制过程中,会发现做的相关操 ...
- 用ildasm/ilasm修改IL代码(操作步骤)
在开发中遇到这样一个场景,需要修改一个dll文件(.NET程序集)中某些地方的类型名称,但没有源代码,只能修改IL代码. 操作步骤如下: 1. 运行ildasm ildasm是由微软提供的.NET程序 ...