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 ...
随机推荐
- MVC之AJAX异步提交表单
第一种用法: 在MVC中,依然可以使用ajax校验,跟在WebForm中的使用时一样的,唯一的区别就是将以前的URL路劲改为访问控制器下的行为 前台 <html> <head> ...
- opencv学习笔记——Scalar数据结构的理解
首先看一下Scalar的定义 typedef struct Scalar { ]; }Scalar; 可以看到,Scalar是一个由长度为4的数组作为元素构成的结构体,Scalar最多可以存储四个值, ...
- Finding files on a *nix/Linux and sorting by size
1. Finding files on *NIX and sort by size find ~ -iregex ".*/*.sh" -type f -print0 | xargs ...
- AngularJs:Directive指令用法
摘自:http://www.jb51.net/article/83051.htm 摘要:Directive(指令)是AngularJ非常强大而有有用的功能之一.它就相当于为我们写了公共的自定义DOM元 ...
- MongoDB Windows环境安装及配置( 一)
原文http://www.cnblogs.com/lzrabbit/p/3682510.html MongoDB一般安装 1.首先到官网 (http://www.mongodb.org/downloa ...
- html基础之css标签
css style: 里面的写的就叫做css,每一个样式的间隔用英文分号, 全部相同的时候引用class. css有三种写法: 1.在head标签中增加style标签,在style标签中去写css样式 ...
- (转)《SSO CAS单点系列》之 15分钟让你了解SSO技术到底是个什么鬼!
Web应用系统的演化总是从简单到复杂,从单功能到多功能模块再到多子系统方向发展. .当前的大中型Web互联网应用基本都是多系统组成的应用群,由多个web系统协同为用户提供服务. 多系统应用群,必然意味 ...
- 整数(质因子)分解(Pollard rho大整数分解)
整数分解,又称质因子分解.在数学中,整数分解问题是指:给出一个正整数,将其写成几个素数的乘积的形式. (每个合数都可以写成几个质数相乘的形式,这几个质数就都叫做这个合数的质因数.) .试除法(适用于范 ...
- 模块讲解----subprocess模块
历史 #输出结果到屏幕上,并不返回执行状态os.system('dir')#保存命令的执行结果输出ret = os.popen('dir').read() 问题:上面2条是把命令结果保存下来了,但是返 ...
- oauth2(转载http://www.rollosay.com/it/%E4%BD%BF%E7%94%A8OAuth-Server-PHP%E5%AE%9E%E7%8E%B0OAuth2%E6%9C%8D%E5%8A%A1)
http://www.rollosay.com/it/%E4%BD%BF%E7%94%A8OAuth-Server-PHP%E5%AE%9E%E7%8E%B0OAuth2%E6%9C%8D%E5%8A ...