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​)dpi​​m+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∑i​g(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∑m​m+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+11​i=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 + 期望)相关推荐

  1. 【BZOJ3925】[ZJOI2015]地震后的幻想乡(动态规划)

    [BZOJ3925][ZJOI2015]地震后的幻想乡(动态规划) 题面 BZOJ 洛谷 题解 题目里面有一句提示:对于\(n\)个\([0,1]\)之间的随机变量\(x1,x2,...,xn\),第 ...

  2. 3925: [Zjoi2015]地震后的幻想乡

    3925: [Zjoi2015]地震后的幻想乡 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 615   Solved: 362 [ Submit ...

  3. BZOJ 3925 [Zjoi2015]地震后的幻想乡 ——期望DP

    我们只需要考虑$\sum F(x)P(x)$的和, $F(x)$表示第x大边的期望,$P(x)$表示最大为x的概率. 经过一番化简得到$ans=\frac{\sum T(x-1)}{m+1}$ 所以就 ...

  4. BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)

    CLJ就是喜欢出ctsc上讲的东西,看来还是得找时间把他的那几道题做下 首先记f(x)为答案>x的概率,那么把这个东西从0到1积分就是答案了 f(x)<=>边小于x不能使图联通的概率 ...

  5. BZOJ 3925 [Zjoi2015]地震后的幻想乡

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3925 题意:给定一个 n n点mm边的无向图,没有重边和自环,每条边的权值为 [0,1] [0 ...

  6. CSU1129 送货到家 状压dp

    哈哈发现这道题竟然没有题解,于是我决定写一份! 状压dp 题目: 懒惰的巫女Reimu因为各种原因在香霖堂的店主Rinnosuke那儿欠下了很多债,于是乎只好靠帮他在幻想乡中送货来偿还掉微不足道的一小 ...

  7. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  8. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  9. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

最新文章

  1. Android View体系(十)自定义组合控件
  2. 修改vb6的编译器c2.exe使它可以输出汇编代码_xv6笔记-启动代码分析
  3. PAT甲级1069 The Black Hole of Numbers:[C++题解]模拟、6174
  4. boost::mp11::mp_fold相关用法的测试程序
  5. linux 文件浏览器_浏览Linux文件系统
  6. 探秘手淘高可用平台(三)——热修复和开发流程
  7. 不要让Javascript的等价表格看上去那么难看
  8. 代码开源许可证 区别 Apache MIT GPL
  9. linux系统开启ssh端口号
  10. python getattrribute_Python学习——面向对象高级之反射
  11. 命中有时终须有,命中无时莫强求--命理理论
  12. 【Tyvj1922】Freda的迷宫
  13. 深度学习在工业界的应用案例(二)
  14. Java基本方法命名
  15. 编写Java程序时的一些经验总结
  16. 深入理解 Comparable 接口和 Comparator 接口以及Arrays.sort()
  17. wap.php区别,WAP與PHP程序設計之基礎篇
  18. Ubuntu下使用GCC开发STM32的环境的搭建
  19. 国内首家免费企业级私有镜像库 有容云AppHouse震撼来袭
  20. Ubuntu 小键盘用不了

热门文章

  1. 看见到洞见之引子(二)机器学习算法
  2. 大数据时代,如何才能提高自身竞争力?
  3. ubuntu安装matlab2009,Ubuntu中安装Matlab2010a
  4. java序列化有什么用_java中序列化的作用
  5. python获取div标签的id_Python 获取div标签中的文字实例
  6. docker 查看容器_Docker介绍
  7. java try finally connectoin close_Java SocketChannel類代碼示例
  8. linux中的ip地址范围,linux – ip地址范围参数
  9. 计算机网络互联网技术实验报告,2013计算机网络技术与应用.实验报告01
  10. future.cancel不能关闭线程_多线程与高并发笔记