[ZJOI2015] 地震后的幻想乡(状压dp + 期望)
problem
luogu-P3343
solution
dp(i):dp(i):dp(i): 当恰好加入第 iii 小边时候,所有点联通的方案数。
则 ans=∑idpi(mi)im+1ans=\sum_i \frac{dp_i}{\binom mi}\frac{i}{m+1}ans=∑i(im)dpim+1i 。
重点是如何计算出 dp(i)dp(i)dp(i)。
这个恰好的限制不好搞。加第 iii 小的边之前不能提前联通,加后一定要联通。
转化一下,dp(i)=dp(i)=dp(i)= 加之前不连通的方案数 −-− 加之后不连通的方案数。
记 f(s,i):sf(s,i):sf(s,i):s 点集中的点之间连了 iii 条边后 sss 中的点仍然不连通的方案数。
记 g(s,i):sg(s,i):sg(s,i):s 点集中的点之间连了 iii 条边后 sss 中的点联通的方案数。
显然 f(s,i)+g(s,i)=(cnt(s)i)f(s,i)+g(s,i)=\binom{cnt(s)}{i}f(s,i)+g(s,i)=(icnt(s)),其中 cnt(s):cnt(s):cnt(s): 点集 sss 中的点之间的边数。
转移枚举 sss 的子集 ttt,满足 s&(−s)s\&(-s)s&(−s),即 sss 中最小元素点也在 ttt 集合内。
f(s,i)=∑(s&−s)∈t⊂s∑j=0ig(t,j)(s⊕ti−j)f(s,i)=\sum_{(s\&-s)\in t\subset s}\sum_{j=0}^ig(t,j)\binom{s\oplus t}{i-j} f(s,i)=(s&−s)∈t⊂s∑j=0∑ig(t,j)(i−js⊕t)
这种转移相当于以 sss 中最小元素点为参考,其所在的联通块为 ttt,其余看作不连通,且 (s⊕ti−j)\binom{s\oplus t}{i-j}(i−js⊕t) 任意选的边连出来的集合一定不与 ttt 有边相连。这样就不会算重了。
最后 dpi=f({1,2,...,n},i−1)−f({1,2,...,n},i)dp_i=f(\{1,2,...,n\},i-1)-f(\{1,2,...,n\},i)dpi=f({1,2,...,n},i−1)−f({1,2,...,n},i)。
在代码实现中统计答案略有不同,我是将这个式子稍微展开了一下。
ans=∑i=1mim+1f({1,2,...,n},i−1)−f({1,2,...,n},i)(mi)ans=\sum_{i=1}^m\frac{i}{m+1}\frac{f(\{1,2,...,n\},i-1)-f(\{1,2,...,n\},i)}{\binom mi} ans=i=1∑mm+1i(im)f({1,2,...,n},i−1)−f({1,2,...,n},i)
考虑相邻两位:
im+1f({1,2,...,n},i−1)−f({1,2,...,n},i)(mi)i+1m+1f({1,2,...,n},i)−f({1,2,...,n},i+1)(mi+1)\frac{i}{m+1}\frac{f(\{1,2,...,n\},i-1)-f(\{1,2,...,n\},i)}{\binom mi}\\ \frac{i+1}{m+1}\frac{f(\{1,2,...,n\},i)-f(\{1,2,...,n\},i+1)}{\binom m{i+1}} m+1i(im)f({1,2,...,n},i−1)−f({1,2,...,n},i)m+1i+1(i+1m)f({1,2,...,n},i)−f({1,2,...,n},i+1)
将 1m+1\frac{1}{m+1}m+11 提出来,发现 i∗−f({1,2,...,n},i)i*-f(\{1,2,...,n\},i)i∗−f({1,2,...,n},i) 且 (i+1)∗+f({1,2,...,n},i)(i+1)*+f(\{1,2,...,n\},i)(i+1)∗+f({1,2,...,n},i),相加其实就是加入了一次 f({1,2,...,n},i)f(\{1,2,...,n\},i)f({1,2,...,n},i)。
而 f({1,2,...,n},m)=0f(\{1,2,...,n\},m)=0f({1,2,...,n},m)=0,不可能所有边都加完了还不联通。
所以,有:
ans=1m+1∑i=0mf({1,2,...,n},i)(mi)ans=\frac{1}{m+1}\sum_{i=0}^m\frac{f(\{1,2,...,n\},i)}{\binom mi} ans=m+11i=0∑m(im)f({1,2,...,n},i)
code
#include <bits/stdc++.h>
using namespace std;
#define double long double
#define int long long
int n, m;
int cnt[1 << 10];
double c[50][50];
int f[1 << 10][50], g[1 << 10][50];
struct node { int u, v; }E[50];signed main() {scanf( "%lld %lld", &n, &m );for( int i = 1;i <= m;i ++ ) scanf( "%lld %lld", &E[i].u, &E[i].v );for( int s = 0;s < (1 << n);s ++ )for( int i = 1;i <= m;i ++ )if( (s >> E[i].u - 1 & 1) and (s >> E[i].v - 1 & 1) )cnt[s] ++;for( int i = 0;i <= m;i ++ ) {c[i][0] = c[i][i] = 1;for( int j = 1;j < i;j ++ ) c[i][j] = c[i - 1][j - 1] + c[i - 1][j];}for( int s = 0;s < (1 << n);s ++ )for( int i = 0;i <= cnt[s];i ++ ) {for( int t = s;t;t = (t - 1) & s )if( t & (s & -s) )for( int j = 0;j <= min( cnt[t], i );j ++ )f[s][i] += g[t][j] * c[cnt[s ^ t]][i - j];g[s][i] = c[cnt[s]][i] - f[s][i];}double ans = 0;for( int i = 0;i <= m;i ++ ) ans += 1.0 / (m + 1) * f[(1 << n) - 1][i] / c[m][i];printf( "%Lf\n", ans );return 0;
}
[ZJOI2015] 地震后的幻想乡(状压dp + 期望)相关推荐
- 【BZOJ3925】[ZJOI2015]地震后的幻想乡(动态规划)
[BZOJ3925][ZJOI2015]地震后的幻想乡(动态规划) 题面 BZOJ 洛谷 题解 题目里面有一句提示:对于\(n\)个\([0,1]\)之间的随机变量\(x1,x2,...,xn\),第 ...
- 3925: [Zjoi2015]地震后的幻想乡
3925: [Zjoi2015]地震后的幻想乡 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 615 Solved: 362 [ Submit ...
- BZOJ 3925 [Zjoi2015]地震后的幻想乡 ——期望DP
我们只需要考虑$\sum F(x)P(x)$的和, $F(x)$表示第x大边的期望,$P(x)$表示最大为x的概率. 经过一番化简得到$ans=\frac{\sum T(x-1)}{m+1}$ 所以就 ...
- BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)
CLJ就是喜欢出ctsc上讲的东西,看来还是得找时间把他的那几道题做下 首先记f(x)为答案>x的概率,那么把这个东西从0到1积分就是答案了 f(x)<=>边小于x不能使图联通的概率 ...
- BZOJ 3925 [Zjoi2015]地震后的幻想乡
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3925 题意:给定一个 n n点mm边的无向图,没有重边和自环,每条边的权值为 [0,1] [0 ...
- CSU1129 送货到家 状压dp
哈哈发现这道题竟然没有题解,于是我决定写一份! 状压dp 题目: 懒惰的巫女Reimu因为各种原因在香霖堂的店主Rinnosuke那儿欠下了很多债,于是乎只好靠帮他在幻想乡中送货来偿还掉微不足道的一小 ...
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
\(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...
- codeforces 8C. Looking for Order 状压dp
题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...
- UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...
最新文章
- Android View体系(十)自定义组合控件
- 修改vb6的编译器c2.exe使它可以输出汇编代码_xv6笔记-启动代码分析
- PAT甲级1069 The Black Hole of Numbers:[C++题解]模拟、6174
- boost::mp11::mp_fold相关用法的测试程序
- linux 文件浏览器_浏览Linux文件系统
- 探秘手淘高可用平台(三)——热修复和开发流程
- 不要让Javascript的等价表格看上去那么难看
- 代码开源许可证 区别 Apache MIT GPL
- linux系统开启ssh端口号
- python getattrribute_Python学习——面向对象高级之反射
- 命中有时终须有,命中无时莫强求--命理理论
- 【Tyvj1922】Freda的迷宫
- 深度学习在工业界的应用案例(二)
- Java基本方法命名
- 编写Java程序时的一些经验总结
- 深入理解 Comparable 接口和 Comparator 接口以及Arrays.sort()
- wap.php区别,WAP與PHP程序設計之基礎篇
- Ubuntu下使用GCC开发STM32的环境的搭建
- 国内首家免费企业级私有镜像库 有容云AppHouse震撼来袭
- Ubuntu 小键盘用不了
热门文章
- 看见到洞见之引子(二)机器学习算法
- 大数据时代,如何才能提高自身竞争力?
- ubuntu安装matlab2009,Ubuntu中安装Matlab2010a
- java序列化有什么用_java中序列化的作用
- python获取div标签的id_Python 获取div标签中的文字实例
- docker 查看容器_Docker介绍
- java try finally connectoin close_Java SocketChannel類代碼示例
- linux中的ip地址范围,linux – ip地址范围参数
- 计算机网络互联网技术实验报告,2013计算机网络技术与应用.实验报告01
- future.cancel不能关闭线程_多线程与高并发笔记