BZOJ 3925 ZJOI2015 地震后的幻想乡
假设我们用了边权前i小的边使得图连通,那么对答案的贡献为i/m+1
又因为期望的线性性质,我们只需要求用了i条边就可以了
不妨设g(S)(i)表示用了i条边使得点集S连通的概率
设f(S)(i)表示用了i条边使得点集S没有连通的概率
设cnt(S)表示点集S内部的边的数量
我们可以知道f(S)(i)+g(S)(i)=C( cnt(S),i )
那么我们只需要求出f(S)(i)就可以了
设now是S中的一个点,设T是S的子集且包含now
f(S)(i)=sigma( g(T)(i-j) * C( cnt(S-T),j ) )
之后我们考虑对于答案的计算,设全集为S
对于f(S)(i),对于答案的贡献为 (i+1)/(m+1)-i/m+1 =1/m+1
累加即可
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long LL;
const int maxn=10;
int n,m,u,v,lim;
LL f[1<<maxn][52];
LL g[1<<maxn][52];
LL cnt[1<<maxn];
LL C[52][52];
int s[maxn],Num[1<<maxn]; void pre_C(){
C[0][0]=1;
for(int i=1;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];
}
}return;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
scanf("%d%d",&u,&v);
u--;v--;
s[u]|=(1<<v);s[v]|=(1<<u);
}pre_C();lim=(1<<n)-1;
for(int S=1;S<=lim;++S){
Num[S]=Num[S>>1]+(S&1);
if(Num[S]==1){g[S][0]=1;continue;}
for(int i=0;i<n;++i){
if(S>>i&1)cnt[S]+=Num[s[i]&S];
}cnt[S]>>=1;
int now=(S&(-S));
for(int T=(S&(S-1));T;T=((T-1)&S)){
if(T&now){
for(int i=0;i<=cnt[S];++i){
for(int j=0;j<=i&&j<=cnt[S^T];++j){
f[S][i]+=g[T][i-j]*C[cnt[S^T]][j];
}
}
}
}
for(int i=0;i<=cnt[S];++i)g[S][i]=C[cnt[S]][i]-f[S][i];
}
double ans=0;
for(int i=0;i<=m;++i)ans+=(double)(f[lim][i])/C[m][i];
ans/=m+1;
printf("%.6lf\n",ans);
return 0; }
BZOJ 3925 ZJOI2015 地震后的幻想乡的更多相关文章
- BZOJ 3925 ZJOI2015 地震后的幻想乡 状压dp+期望
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3925 题意概述: 给出一张N点M边的最小生成树,其中每条边的长度为[0,1]的实数,求最小 ...
- BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)
CLJ就是喜欢出ctsc上讲的东西,看来还是得找时间把他的那几道题做下 首先记f(x)为答案>x的概率,那么把这个东西从0到1积分就是答案了 f(x)<=>边小于x不能使图联通的概率 ...
- 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] 地震后的幻想乡(概率DP)
这里有一篇很好很强的博客%%% YouSiki大佬的博客 多理解一会就行了- 代码 #include <bits/stdc++.h> using namespace std; typede ...
- 【BZOJ3925】[ZJOI2015]地震后的幻想乡(动态规划)
[BZOJ3925][ZJOI2015]地震后的幻想乡(动态规划) 题面 BZOJ 洛谷 题解 题目里面有一句提示:对于\(n\)个\([0,1]\)之间的随机变量\(x1,x2,...,xn\),第 ...
- [ZJOI2015]地震后的幻想乡(期望+dp)
题目描述 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们. 这不,幻想乡突然发生了地震,所有的道路都崩塌了.现在的首要任务是尽快让幻想 ...
- BZOJ3925: [Zjoi2015]地震后的幻想乡
Description 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们. 这不,幻想乡突然发生了地震,所有的道路都崩塌了.现在的首要任 ...
- BZOJ3925: [Zjoi2015]地震后的幻想乡【概率期望+状压DP】
Description 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们. 这不,幻想乡突然发生了地震,所有的道路都崩塌了.现在的首要任 ...
- 【洛谷3343_BZOJ3925】[ZJOI2015]地震后的幻想乡(状压 DP_期望)
题目: 洛谷 3343 BZOJ 3925 分析: 谁给我说这是个期望概率神题的,明明没太大关系好吧 「提示」里那个结论哪天想起来再问 Jumpmelon 怎么证. 首先,由于开始修路前 \(e_i\ ...
随机推荐
- 查看mysql集群状态是否正常
如何查看mysql集群状态是否正常: 进入mysql 输入show status like 'wsrep%': 查看cluster sizes 是否为3
- c/c++读取文件
#include <iostream> #include <string> #include <fstream> int main() { std::ifstrea ...
- java学习笔记_GUI(2)
import javax.swing.*; import java.awt.event.*; class Gui implements ActionListener{ JButton button = ...
- MVC3 ViewBage 输出的值 被编码
问题描述: 后台,Actoin中我向ViewBage中加入了一个json ViewBage.JsonDateMenu ="[{\"id\":2,\" ...
- ajax返回的json内容进行排序
关键方法:sort()用于对数组的元素进行排序. return a.num-b.num是升序: return b.num-a.num;是降序 writeln在输出后面加\n,在文档里是换行,在html ...
- nginx-url重写
location /game_web{ if (!-e $request_filename){//请求不是文件或者目录 rewrite ^/game_web/(\/init/$ last; break ...
- php错误消息捕获
<?php header('Content-type:text/html;charset=UTF-8'); //function_exists('ini_set') && ini ...
- CentOS系统中手动调整系统时间的方法
我们一般使用“date -s”命令来修改系统时间.比如将系统时间设定成1996年6月10日的命令如下. #date -s 06/10/96 将系统时间设定成下午1点12分0秒的命令如下. #date ...
- 在asp.net mvc中如何使用Grid++ Report (锐浪报表)
在asp.net mvc中如何使用Grid++ Report (锐浪报表) 在cshtml,razor中的处理方法 以官方的asp.net(csharp)中的第一个示例"1a.简单表格&qu ...
- gridView AspNetPager 翻页时 弹出窗体关闭报错
gridView AspNetPager 翻页后,你右击刷新或F5会发现弹出一个刷新页面. 这是因为默认翻页都是用dopostback方式回发的.因为这时的页面已经不是原来的页面.所以会弹出提示. 这 ...