题意

题目链接

Sol

和cf上的一道题几乎一摸一样

首先根据期望的线性性,可以转化为求每个点的期望打开次数,又因为每个点最多会被打开一次,只要算每个点被打开的概率就行了

设\(anc[i]\)表示\(i\)的反图中能到达的点集大小,答案等于\(\sum_{i = 1}^n \frac{1}{anc[i]}\)(也就是要保证是第一个被选的)

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1001;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N;
bitset<MAXN> f[MAXN], Empty;
double solve() {
N = read();
for(int i = 1; i <= N; i++) f[i] = Empty;
for(int i = 1; i <= N; i++) {
int k = read(); f[i].set(i);
for(int j = 1; j <= k; j++) {
int v = read(); f[v].set(i);
}
}
for(int k = 1; k <= N; k++)
for(int i = 1; i <= N; i++)
if(f[i][k]) f[i] = f[i] | f[k];
double ans = 0;
for(int i = 1; i <= N; i++) ans += 1.0 / f[i].count();
return ans;
}
int main() {
int T = read();
for(int i = 1; i <= T; i++) printf("Case #%d: %.5lf\n", i, solve());
return 0;
}

HDU5036 Explosion(期望 bitset)的更多相关文章

  1. HDU5036 Explosion(期望&&bitset)

    #include <iostream> #include <cstring> #include <string> #include <vector> # ...

  2. hdu 5036 Explosion(概率期望+bitset)

    Problem Description Everyone knows Matt enjoys playing games very much. Now, he to N. Input The firs ...

  3. HDU 5036 Explosion (传递闭包+bitset优化)

    <题目链接> 题目大意: 一个人要打开或者用炸弹砸开所有的门,每个门后面有一些钥匙,一个钥匙对应一个门,告诉每个门里面有哪些门的钥匙.如果要打开所有的门,问需要用的炸弹数量为多少. 解题分 ...

  4. hdu5036 Explosion 传递闭包

    大哲哥的讲课内容 根据期望的线性性,得到总期望为各个点被轰的概率(不会证,好像是这样吧) 传递闭包解决出每个点的祖先(能到达它的点)就能算概率了 bitset能贡献1/w的复杂度,而且导致Floyd只 ...

  5. HDU5036(bitset加速传递闭包+期望)

    HDU5036 题解 题目链接 思路: 求出破坏or打开所有门所需要的期望炮弹数量,那么根据期望的线性性质,我们可以求出每一个门的期望值最后累加起来就行了. 我们最后的目标就是求对于一个门\(i\), ...

  6. 概率期望+闭包+bitset优化——hdu5036

    我们首先得到:     暴力打开这个箱子,能够开那些箱子.这个可以用bitset来进行状态压缩. 用闭包传递来解决这一步     然后,对于每个箱子,我们考虑有多少种方法,使:暴力打开某些箱子,同时能 ...

  7. Hdu 5036-Explosion 传递闭包,bitset,期望/概率

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5036 Explosion Time Limit: 6000/3000 MS (Java/Others)   ...

  8. hdu 5036 Explosion bitset优化floyd

    http://acm.hdu.edu.cn/showproblem.php?pid=5036 题意就是给定一副有向图,现在需要走遍这n个顶点,一开始出发的顶点是这n个之中的随便一个. 如果走了1,那么 ...

  9. NBUT 1635 Explosion(最小顶点覆盖)

    [1635] Explosion 时间限制: 10000 ms 内存限制: 65535 K 问题描述 there is a country which contains n cities connec ...

随机推荐

  1. 【重要通知】本人所有技术文章转移至https://zzqcn.github.io

    本人所有技术文章转移至 https://zzqcn.github.io

  2. pinnet 计算云分区

    fdisk /dev/xvdemne mnlEnterEnter 9G-98G-98G-478M-28G-28G-28G mw #设置文件格式mkfs -t ext4 /dev/xvde5mkfs - ...

  3. python并发编程之进程池,线程池concurrent.futures

    进程池与线程池 在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多, 这会对 ...

  4. POJ 2562

    #include<iostream> #include<algorithm> #define MAXN 15 using namespace std; //int rec[MA ...

  5. odoo开发笔记--自定义server action页面跳转注意

    场景描述: 在添加自定义服务器动作 “复制全部”后发现直接创建了新的记录,并且直接进入到form保存完的状态. 如何解决: if yourself_obj_copy: return { 'type': ...

  6. keytool和openssl生成的证书转换

    keytool和openssl生成的证书转换 keytool生成证书示例 生成私钥+证书: keytool -genkey -alias client -keysize 2048 -validity ...

  7. 源码分析篇 - Android绘制流程(二)measure、layout、draw流程

    performTraversals方法会经过measure.layout和draw三个流程才能将一帧View需要显示的内容绘制到屏幕上,用最简化的方式看ViewRootImpl.performTrav ...

  8. 分布式锁的两种实现方式(基于redis和基于zookeeper)

    先来说说什么是分布式锁,简单来说,分布式锁就是在分布式并发场景中,能够实现多节点的代码同步的一种机制.从实现角度来看,主要有两种方式:基于redis的方式和基于zookeeper的方式,下面分别简单介 ...

  9. Linux-(ping,traceroute,ss)

    ping命令 1.命令格式: ping [参数] [主机名或IP地址] 2.命令功能: ping命令用于:确定网络和各外部主机的状态:跟踪和隔离硬件和软件问题:测试.评估和管理网络.如果主机正在运行并 ...

  10. Tomcat学习总结(11)——Linux下的Tomcat安全优化

    1.web.xml配置及修改: 站点默认主页: <welcome-file-list> <welcome-file>index.html</welcome-file> ...