HDU - 5036 Explosion
来源:互联网 发布:国立中央大学 知乎 编辑:程序博客网 时间:2024/06/15 18:56
Problem Description
Everyone knows Matt enjoys playing games very much. Now, he is playing such a game. There are N rooms, each with one door. There are some keys(could be none) in each room corresponding to some doors among these N doors. Every key can open only one door. Matt has some bombs, each of which can destroy a door. He will uniformly choose a door that can not be opened with the keys in his hand to destroy when there are no doors that can be opened with keys in his hand. Now, he wants to ask you, what is the expected number of bombs he will use to open or destroy all the doors. Rooms are numbered from 1 to N.
Input
The first line of the input contains an integer T, denoting the number of testcases. Then T test cases follow.
In the first line of each test case, there is an integer N (N<=1000) indicating the number of rooms.
The following N lines corresponde to the rooms from 1 to N. Each line begins with an integer k (0<=k<=N) indicating the number of keys behind the door. Then k integers follow corresponding to the rooms these keys can open.
In the first line of each test case, there is an integer N (N<=1000) indicating the number of rooms.
The following N lines corresponde to the rooms from 1 to N. Each line begins with an integer k (0<=k<=N) indicating the number of keys behind the door. Then k integers follow corresponding to the rooms these keys can open.
Output
For each test case, output one line "Case #x: y", where x is the case number (starting from 1), y is the answer which should be rounded to 5 decimal places.
Sample Input
231 21 31 13000
Sample Output
Case #1: 1.00000Case #2: 3.00000
Source
2014 ACM/ICPC Asia Regional Beijing Online
题意:n个房间,每个房间都有若干个钥匙打开其他的门,如果手上没有钥匙可以选择等概率随机选择一个门炸开,求用炸弹数的期望。
思路:每个房间期望都是可加的。 单独考虑一个房间,如果有k个房间被炸开都会导致这个房间被打开。那么炸一次这个房间被打开的概率即为
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <bitset>using namespace std;const int maxn = 1005;bitset<maxn> a[maxn];int main() {int t, cas = 1;int n;scanf("%d", &t);while (t--) {scanf("%d", &n);for (int i = 0; i < n; i++) {a[i].reset();a[i][i] = 1;}int c, x;for (int i = 0; i < n; i++) {scanf("%d", &c);while (c--) {scanf("%d", &x);a[i][--x] = 1;}}for (int i = 0; i < n; i++)for (int j = 0; j < n; j++) if (a[j][i])a[j] |= a[i];double ans = 0;for (int i = 0; i < n; i++) {c = 0;for (int j = 0; j < n; j++)if (a[j][i]) c++;ans += 1.0 / c;}printf("Case #%d: %.5lf\n",cas++,ans);}return 0;}
0 0
- HDU - 5036 Explosion
- HDU 5036 explosion
- hdu 5036 Explosion
- HDU 5036 Explosion
- HDU 5036 Explosion 概率 期望
- HDU 5036 Explosion 概率 期望
- HDU 5036 Explosion (bitset + DP)
- hdu 5036 Explosion(bitset处理概率)
- hdu Explosion(期望)
- HDU 5036 Explosion(北京网络赛E题)
- hdu 5036 Explosion 2014 ACM/ICPC Asia Regional Beijing Online
- HDU 5036 Explosion 2014 北京网络赛E题
- hdu 5036 Explosion (期望+传递闭包)
- hdu 5036 Explosion (bitset优化的传递闭包求解概率)
- HDU 5036 Explosion (2014年北京赛区网络赛E题)
- hdu 5036 Explosion(有向图的删点期望+bitset优化)
- 【传递闭包】 HDOJ 5036 Explosion
- row Explosion
- 我与C++设计模式(十二)——模板模式
- MAPublisher9.5快速开始指南 第9章 导出到Web
- 输入输出外挂
- 模拟赛 球的序列(时间限制1s,内存限制256MB)
- 黑马程序员——Java基础--接口和抽象类的区别
- HDU - 5036 Explosion
- Unity3D -- 图形 -- 向量运算
- POST请求
- JAVA中获取当前系统时间
- C#调用WebBrowser NewWindow
- vijos P1844积木大赛
- 设计模式之观察者模式
- 【自考】信息系统开发与管理(2)
- UVA490水题的一些细节