hdu 4305 概率dp
1 /* 2 题目大意:有n个房间由n-1个隧道连接起来,从1号房间开始, 3 每个节点i都有三种可能: 4 1.被杀死,回到节点1,概率为ki; 5 2.找到出口,离开迷宫,概率ei; 6 3.与它相连的有m个房间,到任意相连房间的概率(1-ki-ei)/m; 7 求走出迷宫要走房间个数的期望。 8 E[i]表示在节点i处的期望值,E[1]即为答案,从后往前推。 9 E[1]=k1*E[1]+sigma(E[j])*(1-k1-e1)/childsize[i]+(1-k1-e1) 10 非叶子节点: 11 E[i]=ki*E[1]+(E[father[i]]+sigma(E[j])*(1-ki-ei)/(childsize[i]+1)+(1-ki-ei) 12 叶子节点: 13 E[i]=ki*E[1]+E[father[i]]*(1-ki-ei)+(1-ki-ei) 14 一般形式: 15 E[i]=Ai*E[1]+Bi*E[father[i]]*(1-ki-ei)+Ci; 16 E[j]=Aj*E[1]+Bj*E[father[j]]*(1-kj-ej)+Cj 17 把儿子节点代入 18 E[i]=(Ai+(1-ki-ei)/m*sigma(Aj))*E[1]+Bi*E[father[i]]+E[i]*(1-ki-ei)/m*sigma(B[j])+(1-ki-ei)/m*sigma(Cj)+(1-ki-ei) 19 把E[i]化简,从下递推到上,可求出E[1]=A1*E[1]+B1*0+C1。 20 */ 21 #pragma warning (disable : 4786) 22 #include <iostream> 23 #include <cstdio> 24 #include <cstring> 25 #include <cmath> 26 #include <vector> 27 using namespace std; 28 29 const double eps=1e-10; 30 const int maxn=10005; 31 double E[maxn],A[maxn],B[maxn],C[maxn]; 32 double k[maxn],e[maxn]; 33 vector<int> f[maxn]; 34 35 bool dfs(int v,int pre) 36 { 37 A[v]=k[v];B[v]=(1-k[v]-e[v])/f[v].size(); 38 C[v]=1-k[v]-e[v]; 39 double temp=0; 40 for(int i=0;i<f[v].size();i++) 41 { 42 int u=f[v][i]; 43 if(u==pre) continue; 44 if(!dfs(u,v)) return false; 45 A[v]+=B[v]*A[u]; 46 C[v]+=B[v]*C[u]; 47 temp+=B[v]*B[u] ; 48 } 49 if(fabs(temp-1)<eps) 50 return false; 51 A[v]/=(1-temp); 52 B[v]/=(1-temp); 53 C[v]/=(1-temp); 54 return true; 55 } 56 int main() 57 { 58 int t,n,i,a,b,icase=0; 59 scanf("%d",&t); 60 while(t--) 61 { 62 scanf("%d",&n); 63 for(i=1;i<=n;i++) f[i].clear(); 64 for(i=1;i<n;i++) 65 { 66 scanf("%d%d",&a,&b); 67 f[a].push_back(b); 68 f[b].push_back(a); 69 } 70 for(i=1;i<=n;i++) 71 { 72 scanf("%lf%lf",&k[i],&e[i]); 73 k[i]/=100;e[i]/=100; 74 } 75 printf("Case %d: ",++icase); 76 if(dfs(1,-1) && fabs(1-A[1])>eps) 77 printf("%.6lf\n",C[1]/(1-A[1])); 78 else printf("impossible\n"); 79 } 80 return 0; 81 }
转载于:https://www.cnblogs.com/xiong-/p/4137982.html
hdu 4305 概率dp相关推荐
- HDU 5001 概率DP || 记忆化搜索
2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP 測 ...
- HDU - 6558/概率dp(从后往前推导)
VJ地址 中文题意: 有一个苦逼程序员小A,他有一个女朋友B,最近看上了一个游戏,他想买这个游戏,可是小A是一个怕老婆的人,每个 月的工资都需要上交,小A找他女朋友商量了好久,最后B同意他用每个月的工 ...
- HDU 4336 概率DP 状压
用d(S)表示所收集到卡片种类状态为S时还需买多少包小浣熊(这是我YY的)的期望. 则有方程d(S) = 1 + (P(空) + P(有)) * d(S) + P(无) * d(T) 其中P(空)表示 ...
- 【原创】概率DP总结 by kuangbin
概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...
- HDU 1493 QQpet exploratory park(概率DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1493 题意:一排有61个格子标号0-60.其中停在5,12, 22, 29, 33, 38, 42, ...
- hdu 3853 LOOPS 概率DP
简单的概率DP入门题 代码如下: 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 ...
- 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.有时候,我告诉孩子来 ...
- hdu4418 概率dp+高斯消元(近日吐槽)
因为过年,好久没更博客了,最近要狂补题解了== 1.做了几天的概率dp,稍后还要写一篇概率dp和期望的总结,当然,下面几天的专题还是概率dp 2.接着还要整理一个漂亮的高斯消元模板= 3.最近打了几场 ...
最新文章
- 目标检测中的分类和定位冲突问题
- 【经典概念】一文详解Batch Normalization!!!
- 机器学习中你不可不知的几个算法常识
- Freemarker条件判断
- xftp提示过期的解决方法
- Oracle 数据库基础学习 (六) 子查询
- 华为2017年财报,为何6036亿销售收入,净利润才479亿?
- 迪杰斯特拉算法(最短路径)
- redis笔记——redis事务及锁应用
- 刚入行的UI设计师,通过临摹优秀UI KIT作品开始
- ubuntu编译libid3tag库报错问题解决
- 优化算法|布谷鸟算法原理及实现
- 轻量级的java HTTP Server——NanoHttpd
- O2O电子商务盈利模式是什么 O2O电子商务模式遇到的困难有哪些?
- AtCoder Beginner Contest 043题解(ABCD)
- 【转载】Aquanaut:水下变形金刚
- C#招行支付流程(一网通支付-PC扫码支付)
- php示例代码之使用MySQLi接口
- python自动读取excel文件邮箱列表,自动批量发送邮件项目(附使用方法+代码)
- css 实现鼠标悬浮时等比放大图片,鼠标移出时还原图片