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 首先考虑只有第 ...
 
随机推荐
- Gym - 101889D:Daunting device (老司机树)
			
题意:N个格子排出一排,开始格子颜色都是1:现在有M个操作: 或,把区间[L,R]颜色改为c: 或,查询一共有多少格子颜色为c. 最后求颜色最多的数量. 数据是随机的,且强制在线. 思路:ODT裸题. ...
 - ZOJ 1002:Fire Net(DFS+回溯)
			
Fire Net Time Limit: 2 Seconds Memory Limit: 65536 KB Suppose that we have a square city with s ...
 - 软工实践——结对作业2【wordCount进阶需求】
			
附录: 队友的博客链接 本次作业的博客链接 同名仓库项目地址 一.具体分工 我负责撰写爬虫爬取信息以及代码整合测试,队友子恒负责写词组词频统计功能的代码. 二.PSP表格 PSP2.1 Persona ...
 - centos6安装opencv2
			
环境 centos6.5 opencv2.4 python2.6(centos自带的) 下载 opencv可从GitHub下载https://github.com/opencv/opencv/tree ...
 - 实验吧—Web——WP之 猫抓老鼠
			
打开解题链接后,发现他是让我们输入key提交查询就能进行下一步 题目中提示了:catch(抓的意思) 那么我们很容易就能想到是BP抓包,抓包后直接放到repeater中改包. 我们先GO一下看看有什么 ...
 - js添加select中option
			
1.js代码 $("#year").append("<option value="+value的值+">"+内容+"& ...
 - LeetCode - Find K Closest Elements
			
Given a sorted array, two integers k and x, find the k closest elements to x in the array. The resul ...
 - SpringMVC(二)高级
			
高级参数绑定 1.1. 绑定数组 1.1.1. 需求 在商品列表页面选中多个商品,然后删除. 1.1.2. 需求分析 功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按 ...
 - Redis源码剖析--列表t_list实现
			
Redis中的列表对象比较特殊,在版本3.2之前,列表底层的编码是 ziplist 和 linkedlist 实现的, 但是在版本3.2之后,重新引入了一个 quicklist 的数据结构,列表的底层 ...
 - CSVN备份初体验
			
备份方法挺多的,目前我知道有四种 其一: 首先复制旧csvn服务器上repositories下的版本库文件夹到新csvn服务器repositories文件夹下面(做以下修改时最好把csvn服务停掉) ...