BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)
CLJ就是喜欢出ctsc上讲的东西,看来还是得找时间把他的那几道题做下
首先记f(x)为答案>x的概率,那么把这个东西从0到1积分就是答案了
f(x)<=>边小于x不能使图联通的概率
这个有点难求,考虑求使图联通的概率
记f(s)为集合s联通的概率,那么f(s)=1-sigma(f(s')*(1-x)^cnt) (s'属于s且s'一定包含某点k,cnt为链接s'与Cs s'的边数)
可以发现f(s)是个多项式,就可以积分了
由于还没用上64位评测系统,double还是不能过,只好用__float128,比较慢而已
CODE:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
typedef vector<__float128> ploy;
ploy operator + (ploy x,ploy y){
ploy ans(max(x.size(),y.size()),);
for (int i=;i<ans.size();i++) {
if (i<x.size()) ans[i]+=x[i];
if (i<y.size()) ans[i]+=y[i];
}
return ans;
}
ploy operator - (ploy x,ploy y) {
ploy ans(max(x.size(),y.size()),);
for (int i=;i<ans.size();i++) {
if (i<x.size()) ans[i]+=x[i];
if (i<y.size()) ans[i]-=y[i];
}
return ans;
}
ploy operator * (ploy x,ploy y) {
ploy ans(x.size()+y.size()-,);
for (int i=;i<x.size();i++)
for (int j=;j<y.size();j++)
ans[i+j]+=x[i]*y[j];
return ans;
}
bool b[];
ploy f[],quick[];
int n,m;
struct edges{int x,y;}e[];
ploy ONE(,);
inline void print(ploy x){
printf("%d\n",x.size());
for (int i=;i<x.size();i++) printf("%lf ",double(x[i]));
printf("\n");
}
void dp(int x){
if (b[x]) return ;
b[x]=;
ploy tmp(,);
for (int i=;i<(<<n);i++) {
if (!(i&)) continue;
if ((i&x)!=i) continue;
if (i==x) continue;
int j=x^i;
int cnt=;
for (int k=;k<=m*;k++)
if (i&(<<e[k].x)&&j&(<<e[k].y)) cnt++;
dp(i);
tmp=tmp+f[i]*quick[cnt];
}
f[x]=ONE-tmp;
}
__float128 cal(ploy x) {
__float128 ans=;
for (int i=;i<x.size();i++) ans+=x[i]*1.0/(i+);
return ans;
}
int main() {
scanf("%d%d",&n,&m);
quick[]=ONE;
quick[]=ploy(,);
quick[][]=;quick[][]=-;
for (int i=;i<=m;i++) quick[i]=quick[i-]*quick[];
for (int i=;i<=m;i++) {
int x,y;
scanf("%d%d",&x,&y);
x--,y--;
e[i*-]=(edges){x,y};
e[i*]=(edges){y,x};
}
b[]=;f[]=ONE;
dp((<<n)-);
ploy ans=ONE-f[(<<n)-];
printf("%.6lf\n",double(cal(ans)));
return ;
}
BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)的更多相关文章
- BZOJ 3925: [Zjoi2015] 地震后的幻想乡(概率DP)
这里有一篇很好很强的博客%%% YouSiki大佬的博客 多理解一会就行了- 代码 #include <bits/stdc++.h> using namespace std; typede ...
- BZOJ 3925 ZJOI2015 地震后的幻想乡 状压dp+期望
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3925 题意概述: 给出一张N点M边的最小生成树,其中每条边的长度为[0,1]的实数,求最小 ...
- BZOJ 3925 ZJOI2015 地震后的幻想乡
假设我们用了边权前i小的边使得图连通,那么对答案的贡献为i/m+1 又因为期望的线性性质,我们只需要求用了i条边就可以了 不妨设g(S)(i)表示用了i条边使得点集S连通的概率 设f(S)(i)表示用 ...
- BZOJ 3925 [Zjoi2015]地震后的幻想乡 ——期望DP
我们只需要考虑$\sum F(x)P(x)$的和, $F(x)$表示第x大边的期望,$P(x)$表示最大为x的概率. 经过一番化简得到$ans=\frac{\sum T(x-1)}{m+1}$ 所以就 ...
- 【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\ ...
随机推荐
- Ubuntu14.04 64bit编译u-boot-2016.07提示 Your dtc is too old, please upgrade to dtc 1.4 or newer
Author:AP0904225版权声明:本文为博主原创文章,转载请标明出处. Ubuntu14.04 64bit环境下编译u-boot-2016.07提示如下错误: CHK include/conf ...
- python获取绑定的IP,并动态指定出口IP
在做采集器的过程中,经常会遇到IP限制的情况,这时候可以通过切换IP能继续访问. 如果是多IP的服务器,那么可以通过切换出口Ip来实现. 1.首先是如何获取服务器绑定的IP import netifa ...
- Poi2006 Palindromes
2780: Poi2006 Palindromes Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 15 Solved: 5[Submit][Stat ...
- python and or用法
and 和 or 是python的两个逻辑运算符,可以使用and , or来进行多个条件内容的判断.下面通过代码简单说明下and or的用法: 1. or:当有一个条件为真时,该条件即为真.逻辑图如 ...
- iOS 8 之 新特性
1. 沙盒间共享数据 2. Metal 3D绘图,据说10倍速,替代了OpenGL 3. AppStore 可视频预览
- Python计算一个项目中含有的代码行数
最近想要知道以前做过的project有多少行代码,因为文件太多,直接手工数效率太低,于是编写一个python程序用来计算一个project有多少代码行. 首先,在一个项目中,有很多子文件夹,子文件夹中 ...
- samba.conf 范例
# Sample configuration file for the Samba suite for Debian GNU/Linux. # # This is the main Samba con ...
- Angularjs在线api文档
http://docs.ngnice.com/api 文档 http://www.ngnice.com/showcase/#/home/home ...
- 如何将php数组或者对象传递给javascript
在网上搜了一些方法,最后自己采用的是通过json字串的方式. 假设有一个php 数组 $arr,代码如下: 代码如下: <script> // html5中默认的script是javasc ...
- Windows上的音频采集技术
在制作发布端的时候,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音,对于音频处理的技术,主要有如下几种: 采集麦克风输入 采集声卡输出 将音频数据送入声卡进行播放 对多路音频输入进行混音处理 ...