题目链接

hdu4035 Maze

题解

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

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

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

然后推一下系数

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

代码

#include<cmath>
#include<cstdio>
#include<ctime>
#include<cstring>
#include<algorithm>
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9')c = getchar();
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
}
#define eps 1e-9
const int maxn = 100007;
struct node {
int v,next;
} edge[maxn << 1];
int head[maxn],num = 0;
inline void add_edge(int u,int v) {
edge[++ num].v = v; edge[num].next = head[u]; head[u] = num;
}
int n;
int a[maxn];
double A[maxn],B[maxn],C[maxn];
double k[maxn],e[maxn];
bool dfs(int x,int fa) {
if(!edge[head[x]].next && x != 1) {
A[x] = k[x];
B[x] = 1 - k[x] - e[x];
C[x] = 1 - k[x] - e[x];
return true;
}
double A_ = 0,B_ = 0,C_ = 0; int cnt = 0;
for(int i = head[x];i;i = edge[i].next) {
int v = edge[i].v;
if(++ cnt && v != fa) {
if(!dfs(v,x)) return false;
A_ += A[v];B_ += B[v],C_ += C[v];
}
}
if(fabs(1 - (1 - k[x] - e[x]) / cnt * B_) < eps) return false ;
A[x] = (k[x] + (1 - k[x] - e[x]) / cnt * A_ ) / (1 - (1 - k[x] - e[x]) / cnt * B_);
B[x] = ((1 - k[x] - e[x]) / cnt) / (1 - (1 - k[x] - e[x]) / cnt * B_);
C[x] = (1 - k[x] - e[x] + (1 - k[x] - e[x]) / cnt * C_) / (1 - (1 - k[x] - e[x]) / cnt * B_);
return true;
}
int main() {
int Q = read();
for(int t = 1;t <= Q;t += 1) {
memset(head,0,sizeof head);
num = 0;
n = read();
for(int i = 1;i < n;++ i) {
int u = read(),v = read();
add_edge(u,v);add_edge(v,u);
}
for(int i = 1;i <= n;++ i) {
scanf("%lf%lf",&k[i],&e[i]);
k[i] /= 100,e[i] /= 100;
}
printf("Case %d : ",t);
if(!dfs(1,1) || fabs(1 - A[1]) < eps) {
puts("impossible"); continue;
} else printf("%.6lf\n",C[1] / (1 - A[1]));
}
}

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. C++ explicit 关键字

    原文转自:http://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造 ...

  2. vim 超强发行版

    推荐第一个: https://github.com/spf13/spf13-vim https://github.com/Spacevim/Spacevim https://github.com/JB ...

  3. Python3学习笔记22-文件读写

    读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操 ...

  4. 64位Win7系统WMware安装Mac OS

    1.         准备工作 l  VMWare Workstation,我的版本是 l  MAC OS安装光盘镜像文件,种子地址 http://www.kuaipan.cn/file/id_611 ...

  5. javascrip学习之 数据类型和变量

    JavaScript 是脚本语言.是一种轻量级的编程语言.是可插入 HTML 页面的编程代码,可由所有的现代浏览器执行. JavaScript的语法和Java语言类似,每个语句以;结束,语句块用{.. ...

  6. CentOS 6.5自动化运维之基于cobbler服务的自动化安装操作系统详解

    一.Cobbler安装 前提:cobbler由epel源提供,故此需要事先配置指向epel的yum源方可进行类似下面的安装过程. # yum install -y epel-release # yum ...

  7. Android用户界面开发:TabHost

    TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout.TabWidget就是每个tab的标签,FrameLayout则是tab内容.TabHost的二种实现方式:第 ...

  8. Expm 9_3 无向图的双连通分量问题

      [问题描述] 给定一个无向图,设计一个算法,判断该图中是否存在关节点,并划分双连通分量. package org.xiu68.exp.exp9; import java.util.Stack; p ...

  9. Java中日期格式化SimpleDateFormat类包含时区的处理方法

    1.前言 需要把格式为“2017-02-23T08:04:02+01:00”转化成”23-02-2017-T15:04:02“格式(中国时区为+08:00所以是15点),通过网上查找答案,发现没有我需 ...

  10. Android学习笔记————利用JDBC连接服务器数据库

    /******************************************************************************************** * auth ...