【HDU4035】Maze

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <vector>
 6 #include <cmath>
 7
 8 using namespace std;
 9 const int maxn=10000+100;
10 int T,n;
11 double E[maxn],K[maxn],A[maxn],B[maxn],C[maxn];
12 vector<int>G[maxn];
13 bool dfs(int u,int fa){
14      double temp=0;
15      if(G[u].size()==1&&fa!=-1){
16          A[u]=K[u];
17          B[u]=1-K[u]-E[u];
18          C[u]=1-K[u]-E[u];
19          return true;
20      }
21      A[u]=K[u];
22      B[u]=(1-K[u]-E[u])/G[u].size();
23      C[u]=1-K[u]-E[u];
24     for(int i=0;i<G[u].size();i++){
25         int v=G[u][i];
26         if(v!=fa){
27             if(!dfs(v,u))return false;
28             A[u]+=A[v]*(1-K[u]-E[u])/G[u].size();
29             C[u]+=(1-K[u]-E[u])/G[u].size()*C[v];
30             temp+=B[v]*(1-K[u]-E[u])/G[u].size();
31         }
32     }
33     if(fabs(1-temp)<=1e-10)return false;
34     A[u]/=(1-temp);
35     B[u]/=(1-temp);
36     C[u]/=(1-temp);
37     return true;
38 }
39 int main(){
40     scanf("%d",&T);
41     for(int t=1;t<=T;t++){
42         memset(A,0,sizeof(A));
43         memset(B,0,sizeof(B));
44         memset(C,0,sizeof(C));
45         scanf("%d",&n);
46         for(int i=1;i<=n;i++)G[i].clear();
47         int x,y;
48         for(int i=1;i<n;i++){
49             scanf("%d%d",&x,&y);
50             G[x].push_back(y);
51             G[y].push_back(x);
52         }
53         for(int i=1;i<=n;i++){
54             scanf("%lf%lf",&K[i],&E[i]);
55             K[i]/=100,E[i]/=100;
56         }
57         printf("Case %d: ",t);
58         if(!dfs(1,-1)||(1-A[1])<=1e-10){
59             printf("impossible\n");
60             continue;
61         }
62        /* for(int i=1;i<=n;i++){
63             cout<<i<<" "<<C[i]<<endl;
64         }*/
65         printf("%.6f\n",C[1]/(1-A[1]));
66     }
67 return 0;
68 }

原文地址:https://www.cnblogs.com/LQLlulu/p/9097888.html

时间: 2024-10-29 03:25:37

【HDU4035】Maze的相关文章

题解 CF1292A 【NEKO&#39;s Maze Game】

有一个结论: 当 \((1,1)\) 不能抵达 \((2,n)\) 时,必定存在一个点对,这两个点的值均为真,且坐标中的 \(x\) 互异,\(y\) 的差 \(\leq 1\) 这个结论的正确性感觉非常显然,就不多说了. 下图可以形象地解释点对的位置关系. 那对于每个点的值,只要开一个数组 f[i][j] 记录一下即可. 有了上述结论,我们记一个变量 \(cnt\) 表示 " 有多少对满足上述结论的点对 " ,则 \(cnt=0\) 时,\((1,1)\) 可以抵达 \((2,n)\

HDU1010 Tempter of the Bone 【DFS】+【剪枝】

Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 70895    Accepted Submission(s): 19535 Problem Description The doggie found a bone in an ancient maze, which fascinated him a

【转】对于杭电OJ题目的分类

[好像博客园不能直接转载,所以我复制过来了..] 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDI

NYOJ353 3D dungeon 【BFS】

3D dungeon 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south

【编程马拉松】【011-Hero】

[编程马拉松算法目录>>>] [011-Hero][工程下载>>>] 1 题目描述 500年前,NowCoder是我国最卓越的剑客.他英俊潇洒,而且机智过人^_^. 突然有一天,NowCoder心爱的公主被魔王困在了一个巨大的迷宫中.NowCoder听说这个消息已经是两天以后了,他知道公主在迷宫中还能坚持T天,他急忙赶到迷宫,开始到处寻找公主的下落. 时间一点一点的过去,NowCoder还是无法找到公主.最后当他找到公主的时候,美丽的公主已经死了.从此NowCoder郁

【HDOJ图论题集】【转】

1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How Many Tables 基础并查集★ 4 1272 小希的迷宫 基础并查集★ 5 1325&&poj1308 Is It A Tree? 基础并查集★ 6 1856 More is better 基础并查集★ 7 1102 Constructing Roads 基础最小生成树★ 8 1232

【LeetCode】深搜DFS(共85题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [98]Validate Binary Search Tree [99]Recover Binary Search Tree [100]Same Tree [101]Symmetric Tree [104]Maximum Depth of Binary Tree [105]Construct Binary Tree from Preorder and Inorder

Bailian2815 城堡问题【DFS】

2815:城堡问题 总时间限制: 1000ms 内存限制: 65536kB 描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # | # # # # # #---#####---#####---#####---# 3 # | | # # # # # #---#########---#####---#---# 4 # # | | | | # # ###

【LeetCode】BFS(共43题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [101]Symmetric Tree 判断一棵树是不是对称. 题解:直接递归判断了,感觉和bfs没有什么强联系,当然如果你一定要用queue改写的话,勉强也能算bfs. // 这个题目的重点是 比较对象是 左子树的左儿子和右子树的右儿子, 左子树的右儿子和右子树的左儿子.不要搞错. // 直接中序遍历的话会有错的情况,最蠢的情况是数字标注改一改.. 1 /** 2