hdu 5036 Explosion bitset优化floyd】的更多相关文章

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号点,然后…
<题目链接> 题目大意:FJ想按照奶牛产奶的能力给她们排序.现在已知有N头奶牛$(1 ≤ N ≤ 1,000)$.FJ通过比较,已经知道了M$1 ≤ M ≤ 10,000$对相对关系.每一对关系表示为“X Y”,意指X的产奶能力强于Y.现在FJ想要知道,他至少还要调查多少对关系才能完成整个排序. 解题分析: 因为完全图只需要$n*(n-1)/2$对关系就能确定所有的所有节点的顺序,所以这里我们只需要求出传递闭包之后,能够确定的关系数,然后相减即可.因为本题 $n\leq10^3$,$O(n^3…
Problem Description Everyone knows Matt enjoys playing games very much. Now, he 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 ) indicating the…
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…
<题目链接> 题目大意: 一个人要打开或者用炸弹砸开所有的门,每个门后面有一些钥匙,一个钥匙对应一个门,告诉每个门里面有哪些门的钥匙.如果要打开所有的门,问需要用的炸弹数量为多少. 解题分析:因为许多门和他们之后的钥匙可能形成闭包的关系,所以,对于所有的闭包而言,只需要炸毁其中的一个门,就可以用其后面的钥匙打开闭包中至少一扇另外的门,一次类推.所以,假设闭包中包含$num$扇门,用炸弹打开闭包中任意一扇门的概率就为:$1/num$(因为炸毁每个闭包的概率为1,即每个闭包必然需要一枚炸弹).所有…
Each of Farmer John's N cows (1 ≤ N ≤ 1,000) produces milk at a different positive rate, and FJ would like to order his cows according to these rates from the fastest milk producer to the slowest. FJ has already compared the milk output rate for M (1…
http://acm.hdu.edu.cn/showproblem.php?pid=5036 n个房间每个房间里面有一把或多把钥匙可以打开其他的门.如果手上没有钥匙可以选择等概率随机选择一个门炸开,求用炸弹数的期望. O(N^3)的复杂度过不了 单独考虑一个房间,如果有k个房间被炸开都会导致这个房间被打开.那么炸一次这个房间被打开的概率即为kn.也就意味着为了把这个房间打开的期望炸的次数为nk. bitset第一次见.. #include <cstdio> #include <cstdl…
http://acm.hdu.edu.cn/showproblem.php?pid=5745 这题好劲爆啊.dp容易想,但是要bitset优化,就想不到了. 先放一个tle的dp.复杂度O(n * m)的 第一个串,记作str[],第二个记作sub[] 思路就是,设dp[i][j][k]表示,匹配了sub的前i个,以str的第j个结尾,然后sub[i]有三种状态,0表示不变化,1表示和前一个,2表示和后一个. 那么以求dp[i][j][0]为列 因为需要的是判断str的第j个结尾是否和sub的前…
http://acm.hdu.edu.cn/showproblem.php?pid=5808 用bitset<120>dp,表示dp[0] = true,表示0出现过,dp[100] = true表示100这个数字出现过. 对于每一个新的数字,val,有转移方程, dp = dp | (dp << val) 比如现在0000101,然后枚举了2进来,0000101 | 0010100 那个区间是暴力扫过去的,是水过去的,关键学了下bitset优化的背包. #include <…
显然并不能直接dfs,因为$m$会非常大,复杂度就是$O(mn)$: 这题有三种做法,都用到了bitset的优化.第二种算是一个意外的收获,之前没想到竟然还有这种神仙操作.. 方法一:缩点+DAG上bitset优化的统计 做有向图连通问题上来先看可不可以缩点首先一个环内点是可以相互连通的,又发现DAG也许方便统计,于是缩点..然后变成一张DAG,只要统计每个点可以往后走到的所有点权(指该环包含的点数)的和.并不好直接把后继全加上去,因为会有点被重复统计.为了避免重复统计,只要直接每个点开一个bi…