bzoj5006: [THUWC2017 Bipartite]随机二分图
某人在玩一个非常神奇的游戏。这个游戏中有一个左右各 nnn 个点的二分图,图中的边会按照一定的规律随机出现。
为了描述这些规律,某人将这些边分到若干个组中。每条边或者不属于任何组 (这样的边一定不会出现),或者只属于一个组。
有且仅有以下三类边的分组:
这类组每组只有一条边,该条边恰好有 50%50\%50% 的概率出现。
这类组每组恰好有两条边,这两条边有 50%50\%50% 的概率同时出现,有 50%50\%50% 的概率同时不出现。
- 这类组每组恰好有两条边,这两条边恰好出现一条,各有 50%50\%50% 的概率出现。
组和组之间边的出现都是完全独立的。
某人现在知道了边的分组和组的种类,想要知道完美匹配数量的期望是多少。你能帮助她解决这个问题吗?
把两条边一组的暂时看作两条边分别有1/2概率出现,这导致两条边同时出现在匹配中时的计算有误差,可以将误差用 一组两条边有±1/4概率同时出现 抵消,然后记忆化搜索,f[S]表示S集合内的点的完美匹配的期望方案数,为了保证选边的有序性并同时减少状态数,f[S]由f[S1]转移过来时,要求S最高位比S1的最高位高
#include<bits/stdc++.h>
typedef long long i64;
const int M=(<<)-,P=1e9+,I2=(P+)/,I4=I2/;
int n,m,ep=,_;
int h[M+][],rnd[];
int ht=;
int&get(int x){
_=;
int w=(x&M)^rnd[x>>];
while(h[w][]){
if(h[w][]==x)return h[w][];
w=w+&M;
}
_=;
h[w][]=x;
return h[w][];
}
struct edge{
int S,p,c;
void upd(int&f,int S0,int c0){
int F(int,int);
if((S0&S)==S&&S0<(S<<)){
f=(f+F(S0^S,c0-c)*i64(p)%P)%P;
}
}
}e[];
int F(int S,int c){
if(!S)return ;
int&f=get(S);
if(!_)for(int i=;i<ep;++i)e[i].upd(f,S,c);
return f;
}
int main(){
scanf("%d%d",&n,&m);
srand(n+m+);
for(int i=;i<;++i)rnd[i]=(rand()^rand()<<)&M;
for(int i=,tp,a,b,c,d;i<m;++i){
scanf("%d",&tp);
scanf("%d%d",&a,&b);
int e1=<<a-|<<n+b-;
e[ep++]=(edge){e1,I2,};
if(tp){
scanf("%d%d",&c,&d);
int e2=<<c-|<<n+d-;
e[ep++]=(edge){e2,I2,};
if(!(e1&e2))e[ep++]=(edge){e1|e2,tp==?I4:-I4,};
}
}
int ans=(i64((F((<<n*)-,n)+P)%P)<<n)%P;
printf("%d\n",ans);
return ;
}
bzoj5006: [THUWC2017 Bipartite]随机二分图的更多相关文章
- bzoj 5006(洛谷 4547) [THUWC2017]Bipartite 随机二分图——期望DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5006 https://www.luogu.org/problemnew/show/P4547 ...
- 【THUWC2017】随机二分图(动态规划)
[THUWC2017]随机二分图(动态规划) 题面 BZOJ 洛谷 题解 如果每天边的限制都是\(0.5\)的概率出现或者不出现的话,可以把边按照二分图左侧的点的编号排序,然后设\(f[i][S]\) ...
- 「THUWC 2017」随机二分图
「THUWC 2017」随机二分图 解题思路 : 首先有一个 \(40pts\) 的做法: 前 \(20pts\) 暴力枚举最终的匹配是怎样的,check一下计算方案数,后 \(20pts\) 令 \ ...
- BZOJ5006 THUWC2017随机二分图(概率期望+状压dp)
下称0类为单边,1类为互生边,2类为互斥边.对于一种匹配方案,考虑其出现的概率*2n后对答案的贡献,初始为1,如果有互斥边显然变为0,否则每有一对互生边其贡献*2.于是有一个显然的dp,即设f[S1] ...
- [BZOJ5006][LOJ#2290][THUWC2017]随机二分图(概率+状压DP)
https://loj.ac/problem/2290 题解:https://blog.csdn.net/Vectorxj/article/details/78905660 不是很好理解,对于边(x1 ...
- [THUWC2017]随机二分图
题目大意 给一张二分图,有左部点和右部点. 有三种边,第一种是直接从左部点连向右部点,出现概率为50%. 第二种边一组里有两条边,这两条边同时出现或者不出现,概率都是50%. 第三种边一组里有两条边, ...
- Luogu4547 THUWC2017 随机二分图 概率、状压DP
传送门 考虑如果只有$0$组边要怎么做.因为$N \leq 15$,考虑状压$DP$.设$f_i$表示当前的匹配情况为$i$时的概率($i$中$2^0$到$2^{N-1}$表示左半边的匹配情况,$2^ ...
- THUWC2017随机二分图
题面链接 洛谷 sol 唯一的重点是拆边... 0的不管,只看1.2. 先无论如何把两条边的边权赋为\(0.5\)然后我们发现如果两个都选了. 对于第一种边,我们发现如果\(\frac{1}{2} * ...
- [LOJ2290] [THUWC2017] 随机二分图
题目链接 LOJ:https://loj.ac/problem/2290 洛谷:https://www.luogu.org/problemnew/show/P4547 Solution 首先考虑只有第 ...
随机推荐
- textarea去掉右下三角号
/*去掉textarea右下角三角符号*/ resize : none; 修改样式直接覆盖就行,会把默认样式覆盖掉.如border,width,height,border-radius
- Blender简单动画:一个小球从一座山上滚下.
简单动画:一个小球从一座山上滚下.注:[key]方括号内是快捷键; {大括号}内是模式,页签名称或选项等. ==== 1. 建模: == 1.1 山[shift A] 建立平面plane,可以大 ...
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解(SQL数据库和Oracle数据库的区别)
https://www.cnblogs.com/mq0036/p/4155136.html 我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个tabl ...
- 直面Java 第003期
. 问:什么是平台无关性,Java是如何做到平台无关的? 解: 大家说的都很对,看来大家对这个概念掌握的很可以.我简单总结一下. 跨平台指的是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行 ...
- day 06Hadoop
更换虚拟机以后操作的步奏1.到每一台机器上修改ip地址 ,然后修改hosts1.5 给每台机器配置免密码登录 2.修改hadoop 的配置文件,发送到每台机器上3.启动dfs start-dfs.sh ...
- react-redux 的使用
1 安装react-redux: npm install --save react-redux 2.之前使用redux的store.subscribe监听 store的状态改变,通过store.get ...
- kustomize 模版自由的配置&&自定义kubernetes工具
kustomize 是一个可以方便我们基于模版配置,自定义kubernetes 的工具,类似kompose,但是个人觉得kompose 更灵活点,而且使用上更方便 安装 mac brew instal ...
- JSON数据的优化
JSON数据的可以优化吗?肯定可以,之前都是使用XML,但之后用XML越来越少了,就是因为XML包含的冗余信息太多了.那么JSON数据有没有冗余呢? 肯定有,名称就是重复的!! 例如如下的JSON数据 ...
- Python网络_UDP编程
本章将介绍UDP编程,更多内容请参考:Python学习指南 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP连接,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接, ...
- C#中Socket关闭 Close、Dispose、Shutdown、Disconnect
An answer on StackOverflow made me think I have finally reached some glimpse of an understanding. Th ...