hdu4035 Maze(概率dp)
来源:互联网 发布:知乎成功的原因 编辑:程序博客网 时间:2024/04/30 11:13
hdu4035
题目
一颗树形的迷宫,对于每个房间,有几率被杀回到房间1,有几率逃出去,有几率随机到相邻的房间,问逃出去的概率。
思路
http://www.cnblogs.com/kuangbin/archive/2012/10/03/2711108.html
推公式的概率dp,精妙之处在于E[i] = ki*E[1] + ei*0 + (1-ki-ei)/m*( E[father[i]]+1 + ∑( E[child[i]]+1 ) );以及设对每个结点:E[i] = Ai*E[1] + Bi*E[father[i]] + Ci;学到了
代码
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <vector>#include <cmath>using namespace std;typedef long long ll;const int MAXN=10010;const double eps=1e-9;double k[MAXN],e[MAXN];double A[MAXN],B[MAXN],C[MAXN];vector<int>vec[MAXN];bool dfs(int t,int pre){ int m=vec[t].size(); A[t]=k[t]; B[t]=(1-k[t]-e[t])/m; C[t]=1-k[t]-e[t]; double temp=0; for(int i=0; i<m; i++) { int v=vec[t][i]; if(v==pre) continue; if(!dfs(v,t))return false; A[t]+=(1-k[t]-e[t])/m*A[v]; C[t]+=(1-k[t]-e[t])/m*C[v]; temp+=(1-k[t]-e[t])/m*B[v]; } if(fabs(temp-1)<eps) return false; A[t]/=(1-temp); B[t]/=(1-temp); C[t]/=(1-temp); return true;}int main(){ int T,n,u,v,kase=1; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1; i<=n; i++)vec[i].clear(); for(int i=1; i<n; i++) { scanf("%d%d",&u,&v); vec[u].push_back(v); vec[v].push_back(u); } for(int i=1; i<=n; i++) { scanf("%lf%lf",&k[i],&e[i]); k[i]/=100; e[i]/=100; } printf("Case %d: ",kase++); if(dfs(1,-1)&&fabs(1-A[1])>eps) { printf("%.6lf\n",C[1]/(1-A[1])); } else printf("impossible\n"); } return 0;}
0 0
- hdu4035 Maze(概率dp)
- 【HDU4035】【Maze】【概率dp】
- HDU4035 Maze 概率DP+图
- 【HDU4035】【Maze】【概率dp】【数列求和】
- [HDU4035]Maze(概率与期望)
- [HDU4035]Maze 期望DP
- hdu4035 树上概率dp
- hdu4035 概率dp
- 【HDU4035】Maze-期望DP+树形DP
- hdu4035 概率DP求期望
- hdu4035.Maze
- HDU4035 Maze
- hdu4035----Maze
- HDU4035-Maze
- (概率+树形)dp HDU 4035 Maze
- HDU 4035 Maze (树状dp + 概率)
- HDU-4035--Maze (概率dp)
- hdu 4035 Maze (树形概率dp)
- java 多线程编程 第五章
- Jquery中的ajax $.load,.$get,$.post
- JavaScript原型和原型链
- C# 鼠标拖拉移动窗体控件
- Android--获取位置信息
- hdu4035 Maze(概率dp)
- 编程的三个阶段(转载自微信mindwind)
- PHP :Call to undefined function mysql_connect()
- [kernel 启动流程] (第三章)第一阶段之——proc info的获取
- java泛型初探
- windows qt 使用c++ posix接口编写多线程程序(一)
- Android时间轴效果的实现
- pdo-quote()之防 sql 注入
- Parencodings