题目链接

hdu4035 Maze

题解

f[u]表示在节点u通关的所需的边数期望

转移方程分叶子节点和非叶子点讨论

发现都可以化成f[x]=af[1]+bf[dad]+c的形式

然后推一下系数

还是看这个吧https://www.cnblogs.com/Paul-Guderian/p/7624039.html

代码

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<ctime>
  4. #include<cstring>
  5. #include<algorithm>
  6. inline int read() {
  7. int x = 0,f = 1;
  8. char c = getchar();
  9. while(c < '0' || c > '9')c = getchar();
  10. while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
  11. return x * f;
  12. }
  13. #define eps 1e-9
  14. const int maxn = 100007;
  15. struct node {
  16. int v,next;
  17. } edge[maxn << 1];
  18. int head[maxn],num = 0;
  19. inline void add_edge(int u,int v) {
  20. edge[++ num].v = v; edge[num].next = head[u]; head[u] = num;
  21. }
  22. int n;
  23. int a[maxn];
  24. double A[maxn],B[maxn],C[maxn];
  25. double k[maxn],e[maxn];
  26. bool dfs(int x,int fa) {
  27. if(!edge[head[x]].next && x != 1) {
  28. A[x] = k[x];
  29. B[x] = 1 - k[x] - e[x];
  30. C[x] = 1 - k[x] - e[x];
  31. return true;
  32. }
  33. double A_ = 0,B_ = 0,C_ = 0; int cnt = 0;
  34. for(int i = head[x];i;i = edge[i].next) {
  35. int v = edge[i].v;
  36. if(++ cnt && v != fa) {
  37. if(!dfs(v,x)) return false;
  38. A_ += A[v];B_ += B[v],C_ += C[v];
  39. }
  40. }
  41. if(fabs(1 - (1 - k[x] - e[x]) / cnt * B_) < eps) return false ;
  42. A[x] = (k[x] + (1 - k[x] - e[x]) / cnt * A_ ) / (1 - (1 - k[x] - e[x]) / cnt * B_);
  43. B[x] = ((1 - k[x] - e[x]) / cnt) / (1 - (1 - k[x] - e[x]) / cnt * B_);
  44. C[x] = (1 - k[x] - e[x] + (1 - k[x] - e[x]) / cnt * C_) / (1 - (1 - k[x] - e[x]) / cnt * B_);
  45. return true;
  46. }
  47. int main() {
  48. int Q = read();
  49. for(int t = 1;t <= Q;t += 1) {
  50. memset(head,0,sizeof head);
  51. num = 0;
  52. n = read();
  53. for(int i = 1;i < n;++ i) {
  54. int u = read(),v = read();
  55. add_edge(u,v);add_edge(v,u);
  56. }
  57. for(int i = 1;i <= n;++ i) {
  58. scanf("%lf%lf",&k[i],&e[i]);
  59. k[i] /= 100,e[i] /= 100;
  60. }
  61. printf("Case %d : ",t);
  62. if(!dfs(1,1) || fabs(1 - A[1]) < eps) {
  63. puts("impossible"); continue;
  64. } else printf("%.6lf\n",C[1] / (1 - A[1]));
  65. }
  66. }

hdu4035 Maze的更多相关文章

  1. HDU-4035 Maze

    http://acm.hdu.edu.cn/showproblem.php?pid=4035 树上的概率dp.   Maze Time Limit: 2000/1000 MS (Java/Others ...

  2. HDU4035 Maze(师傅逃亡系列•二)(循环型 经典的数学期望)

    When wake up, lxhgww find himself in a huge maze. The maze consisted by N rooms and tunnels connecti ...

  3. [HDU4035] Maze(概率DP)

    HDU4035 有\(n\)个房间 , 由\(n-1\)条隧道连通起来 , 实际上就形成了一棵树 , 从结点\(1\)出发 , 开始走 , 在每个结点\(i\)都有\(3\)种可能 : \(1.\)被 ...

  4. HDU-4035 Maze (概率DP求期望)

    题目大意:在一个树形迷宫中,以房间为节点.有n间房间,每间房间存在陷阱的概率为ki,存在出口的概率为ei,如果这两种情况都不存在(概率为pi),那么只能做出选择走向下一个房间(包括可能会走向上一个房间 ...

  5. HDU4035 Maze 【树形DP】【期望DP】

    题目分析: 以前一直不会这个方法, 我好菜啊. 转移分为三个部分,一个是直接成功,一个是转移到E1,还有一个是转移到自己周围的一圈儿点. 如果是叶子那么只能转移到父亲,如果不是叶子可以把非叶子的转移代 ...

  6. hdu4035 Maze 【期望dp + 数学】

    题目链接 BZOJ4035 题解 神题啊...orz 不过网上题解好难看,数学推导不写\(Latex\)怎么看..[Latex中毒晚期] 我们由题当然能很快写出\(dp\)方程 设\(f[i]\)表示 ...

  7. HDU4035 Maze(期望DP)

    题意 抄袭自https://www.cnblogs.com/Paul-Guderian/p/7624039.html 有n个房间,由n-1条隧道连通起来,形成一棵树,从结点1出发,开始走,在每个结点i ...

  8. hdu4035 Maze (树上dp求期望)

    dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点1处(概率为ki) 2.找到出口,走出迷宫 ...

  9. [hdu4035] Maze【概率dp 数学期望】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4035 真的是一道好题,题解比较麻烦,我自己在纸上写了好大一块草稿才搞出来,不用公式编辑器的话就很难看清楚 ...

随机推荐

  1. Linux驱动技术(三) _DMA编程【转】

    转自:https://www.cnblogs.com/xiaojiang1025/archive/2017/02/11/6389194.html DMA即Direct Memory Access,是一 ...

  2. 自助Linux之问题诊断工具strace【转】

    转自:http://www.cnblogs.com/bangerlee/archive/2012/02/20/2356818.html 引言 “Oops,系统挂死了..." “Oops,程序 ...

  3. jvm系列三、java GC算法 垃圾收集器

    原文链接:http://www.cnblogs.com/ityouknow/p/5614961.html 概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 ...

  4. dubbo系列一、dubbo背景介绍、微服务拆分

    一.背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 二.传统应用到分布式应用的演进过程 ...

  5. ORACLE 利用SCN恢复误delete的表

    --kg是误删除的表 SQL> select count(*) from kg;   COUNT(*) ----------     820861 SQL> delete from kg; ...

  6. route 的标志位

    linux下利用route命令查看当前路由信息时,会打印如下信息: root@root:/# route Kernel IP routing tableDestination     Gateway  ...

  7. zabbix系列(十)zabbix添加对zookeeper集群的监控

    1.应用场景描述 在目前公司的业务中,有部分ESB架构用ZooKeeper作为协同服务的场景,做好ZooKeeper的监控很重要. 2.ZooKeeper监控要点 系统监控 内存使用量    ZooK ...

  8. python环境下使用tab自动补全命令

    # vim /usr/lib/python2.7/dist-packages/tab.py 加入如下内容: #!/usr/bin/env python # python startup file im ...

  9. 01 响应式页面-@media介绍,

    我们为什么要写自适应的页面(响应式页面) 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话,那可能就会乱的一塌糊涂,这时候怎么解决呢 ...

  10. PYTHON-文件指针的移动,移动和函数基础

    # 文件内指针的移动 #大前提:文件内指针的移动是Bytes为单位的,唯独t模式下的read读取内容个数是以字符为单位 # f.seek(指针移动的字节数,模式控制): 控制文件指针的移动# 模式控制 ...