http://acm.hdu.edu.cn/showproblem.php?pid=5036

题意就是给定一副有向图,现在需要走遍这n个顶点,一开始出发的顶点是这n个之中的随便一个。

如果走了1,那么1能联通的顶点就可以直接走过去,其他不和1连通的,就需要炸坏。问需要炸弹的期望。

比如一副图是1-->2-->3的。那么期望是11 / 6

假如从1号点开始,1/3概率选中1号点开始,那么需要炸弹数是1(炸开一号),贡献是1/3

假如从2号点开始,1/3概率选中2号点开始,那么需要炸开2号点,然后3号点能直接走到,但是需要炸开1号,贡献是2/3

假如从3号点开始,1/3概率选中3号点开始,那么需要炸开3号点,然后,可以选择炸开一号,2号直接到达,或者炸开2号再炸开1号。

总贡献是1/3 * (1/2 * 2 + 1/2 * 3) = 5 / 6

然后这样分类是做不了的,对于期望的题,一般都是靠期望的独立性。

就是算出每一个们的贡献,相加就是答案。而不是像上面那样,一个一个们地选择可能的方案。

对于这副图,首先自己肯定能到自己,就是选择炸开,然后求一个floyd,统计出有多少个点能够到达k,那么k这个点对答案的贡献

就是1.0 / cnt

因为在cnt种方法里面,只有一种是需要用炸弹的。

比如,我算2号顶点的贡献,就是,

①、炸开一号,一共用了1步,用了0个炸弹,这个炸弹不应该算做2号的消耗。是打开了1号,2号就无条件打开了

②、炸开2号,一共用了2步,用了1个炸弹。

所以贡献是1 / 2

累加即可。

这里的floyd,复杂度是n^3

需要用bitset优化到n^3 / 128

bitset大法好,学习了。

意思就是,

如果是1000位的bool[],你用锕a ^ b需要的时间是O(n)

但是如果用bitset直接做,复杂度是O(n / sizeof bitset)

bitset内存是,8bit是一字节,那么长度 / 8就是字节数。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <bitset>
const int maxn = 1e3 + 20;
bitset<maxn>e[maxn];
void init(int n) {for (int i = 1; i <= n; ++i) {e[i].reset();e[i][i] = 1;}
}
void work() {int n;scanf("%d", &n);init(n);for (int i = 1; i <= n; ++i) {int k;scanf("%d", &k);while (k--) {int x;scanf("%d", &x);e[i][x] = 1;}}
//    for (int k = 1; k <= n; ++k) {
//        for (int j = 1; j <= n; ++j) {
//            for (int i = 1; i <= n; ++i) {
//                e[j][i] = e[j][i] || e[j][k] && e[k][i];
//            }
//        }
//    }
//    cout << e[1][2] << endl;
//    for (int i = 1; i <= n; ++i) {
//        cout << e[i] << endl;
//    }for (int k = 1; k <= n; ++k) {for (int i = 1; i <= n; ++i) {if (e[i][k]) {e[i] |= e[k];}}}
//    cout << endl;
//    for (int i = 1; i <= n; ++i) {
//        cout << e[i] << endl;
//    }double ans = 0.0;for (int i = 1; i <= n; ++i) {int cnt = 0;for (int j = 1; j <= n; ++j) {cnt += e[j][i];}ans += 1.0 / cnt;}static int f = 0;printf("Case #%d: %0.5f\n", ++f, ans);
}int main() {
#ifdef localfreopen("data.txt", "r", stdin);
//    freopen("data.txt", "w", stdout);
#endifint t;scanf("%d", &t);while (t--) work();return 0;
}

View Code

转载于:https://www.cnblogs.com/liuweimingcprogram/p/6263003.html

hdu 5036 Explosion bitset优化floyd相关推荐

  1. Hdu 5036 Explosion

    传送门 题目大意 给定一张$n$个点的有向图$(n\leq 1000)$,每次操作定义为等概率随机选定一个未被标记的点,从它出发将所有它和它能到达的点进行标记,询问期望进行多少次操作. 题解 考虑每个 ...

  2. AcWing4084 号码牌 (并查集 / bitset优化Floyd)

    题目链接: 号码牌 大致题意 给定一个长度为nnn的序列, 第iii个位置的值为aia_iai​. (保证aaa是111~nnn的一个排列) 每个位置还有一个值did_idi​, 若满足∣i−j=di ...

  3. 牛客挑战赛47 C 条件(Floyd bitset优化)

    牛客挑战赛47 C 条件 思路:首先我们要两个图,一个是一定能到达的,一个是可能到达的,如果我们使用floyd (n^3)就有可能会超时,因为只要求询问能否到达,所以权值只有0和1,那我们可以使用bi ...

  4. 【HDU - 5890】Eighty seven(bitset优化背包)

    题干: Mr. Fib is a mathematics teacher of a primary school. In the next lesson, he is planning to teac ...

  5. CodeForces - 577B Modulo Sum(dp+bitset优化)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列,现在问能否选出一个子序列,满足其累加之和可以整除 m 题目分析:可以当做背包去思考,dpi,jdp_{i,j}dpi,j​代表的是选了前 i ...

  6. 牛客多校2 - Greater and Greater(bitset优化暴力)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数组 a ,再给出一个长度最大为 m 的数组 b,现在问在 a 中所有长度为 m 的子数组中,有多少个子数组满足每个相应的元素都大于数组 b 题目分 ...

  7. 牛客 - Strange Bulbs(bitset优化拓扑)

    题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的有向无环图,每个节点都有一个开关和一个灯泡,初始时节点 1 的灯泡是亮的,每次操作开关可以将当前灯泡的状态置反,且会对子节点的开关产生 ...

  8. 牛客 - Prize(bitset优化暴力)

    题目链接:点击查看 题目大意:给出一个长度为 n 的模式串 s ,再给出一个长度为 m 的匹配串,匹配串的每一位的可行数字都会给出,现在问最多可以匹配多少个字符串 题目分析:模式串和匹配串的匹配,AC ...

  9. C 简单瞎搞题(牛客练习赛22)(bitset优化dp)

    Bitset优化Dp 题目链接 一般DP做法 显然后面的数是与前面的数字相关的,所以我们有dp数组,dp[i][j]dp[i][j]dp[i][j]选取了jjj个数,iii是否可以被创造出来,如果可以 ...

最新文章

  1. vue 中eslint 格式报错
  2. 未到期的应收票据贴现时如何记账
  3. Unity3D_(游戏)控制物体的上、下、左、右移动
  4. python opencv创建图像_OpenCV-Python 展示图像(1)
  5. 8 仓储单位类型E1对于物料xxxxxx没有维护
  6. C#网络编程之Http请求
  7. 计算机基础判断试题及答案,计算机基础知识试题及答案判断题
  8. Python 打印字典的KEY 和 VALUE
  9. 计算机超级终端 串口设置,win10系统超级终端软件连接串口设备的处理技巧
  10. vfp python_Visual Fox Pro和Python
  11. 前端之HTML表格s
  12. js中~~和 | 的使用
  13. 大数据解决方案-最新全套文件
  14. android 程序颜色,android – 以编程方式设置scrim颜色
  15. 青龙面板库 大全(9.6更新)
  16. TCP的TIME_WAIT状态为什么要等待2MSL的时长
  17. CSS #38; JS
  18. c++/c/java 资源共享群
  19. 基于SpringCloud微服务的服务平台搭建的一些总结
  20. ElasticSearch 高级

热门文章

  1. 软件套装 推荐书籍-海洋工程类
  2. 分式求二阶导数_近10年高考数学“导数大题”分析,附2021备考建议
  3. linux 使用nginx 权限不够,对于nginx和Linux,有一些关于权限的问题。
  4. cpu win10 安装yolo_Win10+YOLOv3完整安装过程(亲测可运行)
  5. 计算机管理与维护实践课程,天津2012年自考“计算机维护维修(实践)”课程考试大纲...
  6. 1亿以内素数的个数_神奇的素数
  7. yoyo跑_面对“跑腿服务坑”:悠悠跑腿、蜂鸟配送、快跑者,跑腿公司该何去何从?...
  8. 基于matlab实现的人脸检测
  9. 全国大学生数学建模2019年C题机场的出租车问题论文与代码
  10. 如何零基础入门FPGA?这篇文章让你吃透!