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()),0);for (int i=0;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()),0);for (int i=0;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()-1,0);for (int i=0;i<x.size();i++) for (int j=0;j<y.size();j++) ans[i+j]+=x[i]*y[j];return ans; } bool b[1040]; ploy f[1040],quick[100]; int n,m; struct edges{int x,y;}e[100]; ploy ONE(1,1); inline void print(ploy x){printf("%d\n",x.size());for (int i=0;i<x.size();i++) printf("%lf ",double(x[i]));printf("\n"); } void dp(int x){if (b[x]) return ;b[x]=1;ploy tmp(0,0);for (int i=1;i<(1<<n);i++) {if (!(i&1)) continue;if ((i&x)!=i) continue;if (i==x) continue;int j=x^i;int cnt=0;for (int k=1;k<=m*2;k++) if (i&(1<<e[k].x)&&j&(1<<e[k].y)) cnt++;dp(i);tmp=tmp+f[i]*quick[cnt];}f[x]=ONE-tmp; } __float128 cal(ploy x) {__float128 ans=0;for (int i=0;i<x.size();i++) ans+=x[i]*1.0/(i+1);return ans; } int main() {scanf("%d%d",&n,&m);quick[0]=ONE;quick[1]=ploy(2,0);quick[1][0]=1;quick[1][1]=-1;for (int i=2;i<=m;i++) quick[i]=quick[i-1]*quick[1];for (int i=1;i<=m;i++) {int x,y;scanf("%d%d",&x,&y);x--,y--;e[i*2-1]=(edges){x,y};e[i*2]=(edges){y,x};}b[1]=1;f[1]=ONE;dp((1<<n)-1);ploy ans=ONE-f[(1<<n)-1];printf("%.6lf\n",double(cal(ans)));return 0; }
转载于:https://www.cnblogs.com/New-Godess/p/4420861.html
BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)相关推荐
- BZOJ 3925 [Zjoi2015]地震后的幻想乡
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3925 题意:给定一个 n n点mm边的无向图,没有重边和自环,每条边的权值为 [0,1] [0 ...
- BZOJ 3925 [Zjoi2015]地震后的幻想乡 ——期望DP
我们只需要考虑$\sum F(x)P(x)$的和, $F(x)$表示第x大边的期望,$P(x)$表示最大为x的概率. 经过一番化简得到$ans=\frac{\sum T(x-1)}{m+1}$ 所以就 ...
- 3925: [Zjoi2015]地震后的幻想乡
3925: [Zjoi2015]地震后的幻想乡 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 615 Solved: 362 [ Submit ...
- 【BZOJ3925】[ZJOI2015]地震后的幻想乡(动态规划)
[BZOJ3925][ZJOI2015]地震后的幻想乡(动态规划) 题面 BZOJ 洛谷 题解 题目里面有一句提示:对于\(n\)个\([0,1]\)之间的随机变量\(x1,x2,...,xn\),第 ...
- [ZJOI2015] 地震后的幻想乡(状压dp + 期望)
problem luogu-P3343 solution dp(i):dp(i):dp(i): 当恰好加入第 iii 小边时候,所有点联通的方案数. 则 ans=∑idpi(mi)im+1ans=\s ...
- [BZOJ]3926 诸神眷顾的幻想乡(ZJOI2015)
听说大佬们都会后缀自动机. 小C看完SAM,想找个裸题练习一下模板.听说这题还是陈老师出的?(羊毛出在羊身上) Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生 ...
- ●BZOJ 4596 [Shoi2016]黑暗前的幻想乡
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4596 题解: 容斥,矩阵树定理,矩阵行列式 先说说容斥:(一共有 N-1个公司) 令 f[i ...
- P3343-[ZJOI2015]地震后的幻想乡【dp,数学期望】
正题 题目链接:https://www.luogu.com.cn/problem/P3343 题目大意 给出nnn个点的一张无向图,每条边被修复的时间是[0,1][0,1][0,1]的一个随机实数,求 ...
- 【Luogu】P3343地震后的幻想乡(对积分概率进行DP)
题目链接 神难qwq.配合rqy的博客食用. 首先我们学到有一个概率函数$p(x)$表示某事件发生概率取值小于x的函数.这个函数有什么特点呢? 那就是$\int_{-∞}^{∞}p(x)dx=1$ 这 ...
最新文章
- Revit和Unreal Engine真实的建筑可视化视频教程
- Win10下MySQL_Workbench连接远程主机MySQL5.7
- C语言字符数组与字符串的使用及加结束符‘\0‘的问题
- xa协议 mysql_分布式事务XA实现数据一致性的协议与原理
- JavaScript- 正则表达式匹配汉字
- Django(part6)--利用正则的组名进行关键字传参
- 洛谷-P3203 弹飞绵羊 分块
- onTextChanged参数解释及实现EditText字数监听
- 关于DllRegisterServer的调用失败的问题解决办法 错误代码0x80040201
- 创建一个分布式网络爬虫的故事
- html涟漪效果,涟漪效果.html
- c++编译报错 error c2248: “xxx:xxx“:无法访问private成员(在“xxx“类中声明)
- [198].打家劫舍
- 基于pygame做的小游戏
- 解决重邮无法访问蓝鸽听力以及无法访问部分内网的解决方法
- 【Joshua B. Tenenbaum】非线性降维的全局几何框架
- Java基础语法(一)——初识Java
- 关于EDP触摸屏使用笔记
- DIY 联想Thinkpad E530C 安装固态硬盘(双硬盘)——步步图解
- 谈一谈仓库表单表设计