洛谷 P4547 & bzoj 5006 随机二分图 —— 状压DP+期望
题目:https://www.luogu.org/problemnew/show/P4547
https://www.lydsy.com/JudgeOnline/problem.php?id=5006
参考博客:https://www.cnblogs.com/yanshannan/p/9452802.html
注意同一个点连出去的两条边本来就不能一起选!
每次调用 map 会很慢!所以修改的时候新定义一个 &tmp,就能过了。
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define il inline
using namespace std;
typedef long long ll;
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return f?ret:-ret;
}
int const xn=,xm=(<<)+,mod=1e9+;
int n,m,bin[],ct;
map<int,int>f[xm];
struct N{
int s,t,w;
N(int s=,int t=,int w=):s(s),t(t),w(w) {}
}ed[];
il ll pw(ll a,int b){ll ret=; for(;b;b>>=,a=a*a%mod)if(b&)ret=ret*a%mod; return ret;}
il int upt(int x){while(x>=mod)x-=mod; while(x<)x+=mod; return x;}
il int dfs(int s,int t)
{
if(!s&&!t)return ;
if(f[s][t])return f[s][t];
int &tmp=f[s][t];//
for(int i=;i<=ct;i++)
{
if((ed[i].s<<)<=s||(ed[i].s|s)!=s||(ed[i].t|t)!=t)continue;//t
tmp=(tmp+(ll)dfs(s^ed[i].s,t^ed[i].t)*ed[i].w)%mod;
}
return tmp=upt(tmp);//-
}
int main()
{
n=rd(); m=rd();
bin[]=; for(int i=;i<=;i++)bin[i]=bin[i-]*;
int inv2=pw(,mod-),inv4=pw(,mod-);
for(int i=,tp,a,b,c,d;i<=m;i++)
{
tp=rd(); a=rd(); b=rd();
ed[++ct]=N(bin[a-],bin[b-],inv2);
if(!tp)continue; c=rd(); d=rd();
ed[++ct]=N(bin[c-],bin[d-],inv2);
if(a==c||b==d)continue;//!
if(tp==)ed[++ct]=N(bin[a-]|bin[c-],bin[b-]|bin[d-],inv4);
if(tp==)ed[++ct]=N(bin[a-]|bin[c-],bin[b-]|bin[d-],-inv4);
}
printf("%lld\n",(ll)dfs(bin[n]-,bin[n]-)*bin[n]%mod);
return ;
}
洛谷 P4547 & bzoj 5006 随机二分图 —— 状压DP+期望的更多相关文章
- 题解 洛谷 P4547 【[THUWC2017]随机二分图】
根据题意,题目中所求的即为所有\(n!\)种完美匹配的各自的出现概率之和再乘上\(2^n\)的值. 发现\(n\)很小,考虑状压\(DP\).设\(f_{S,T}\)为左部图匹配情况为\(S\),右部 ...
- UOJ #129 / BZOJ 4197 / 洛谷 P2150 - [NOI2015]寿司晚宴 (状压dp+数论+容斥)
题面传送门 题意: 你有一个集合 \(S={2,3,\dots,n}\) 你要选择两个集合 \(A\) 和 \(B\),满足: \(A \subseteq S\),\(B \subseteq S\), ...
- 【题解】洛谷P2704 [NOI2001] 炮兵阵地(状压DP)
洛谷P2704:https://www.luogu.org/problemnew/show/P2704 思路 这道题一开始以为是什么基于状压的高端算法 没想到只是一道加了一行状态判断的状压DP而已 与 ...
- 【题解】洛谷P1896 [SCOI2005] 互不侵犯(状压DP)
洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 这是一道状压DP的经典题 原来已经做过了 但是快要NOIP 复习一波 关于一些位运算的知识 ...
- 洛谷P1171 售货员的难题【状压DP】
题目描述 某乡有n个村庄(1 输入格式: 村庄数n和各村之间的路程(均是整数). 输出格式: 最短的路程. 输入样例: 3 0 2 1 1 0 2 2 1 0 输出样例 3 说明 输入解释 3 {村庄 ...
- 2018.07.18 洛谷P1171 售货员的难题(状压dp)
传送门 感觉是一道经典的状压dp,随便写了一发卡了卡常数开了个O(2)" role="presentation" style="position: relati ...
- 洛谷P2761 软件补丁问题(状压dp)
传送门 啊咧……这题不是网络流二十四题么……为啥是个状压dp…… 把每一个漏洞看成一个状态,直接硬上状压dp 然后因为有后效型,得用spfa //minamoto #include<iostre ...
- 洛谷$P3226\ [HNOI2012]$集合选数 状压$dp$
正解:$dp$ 解题报告: 传送门$QwQ$ 考虑列一个横坐标为比值为2的等比数列,纵坐标为比值为3的等比数列的表格.发现每个数要选就等价于它的上下左右不能选. 于是就是个状压$dp$板子了$QwQ$ ...
- 洛谷 P2622 关灯问题II【状压DP】
传送门:https://www.luogu.org/problemnew/show/P2622 题面: 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的 ...
随机推荐
- 开始翻译《Beginning SharePoint 2013 Development》
伙同涂曙光@kaneboy 和柴晓伟@WindieChai 翻译Beginning SharePoint 2013 Development 作者是Steve Fox,传说中的Andrew Connel ...
- 基于镜像安装mysql
准备目录 cd /opt mkdir -p mysql/data mysql/logs mysql/conf 查找MySql镜像版本 docker search mysql 安装指定版本的mysql镜 ...
- easyUI参数传递Long型时,前台解析出错的问题——SKY
果发现datagrid在显示Long类型数据时有问题.问题如下:比如一个数据ID为20121229101239002,经过转换之后的JSON数据也没有问题,但是在显示的时候就会显示为201212291 ...
- 使用weka训练一个分类器
1 训练集数据 1.1 csv格式 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setos ...
- Python的自省机制
什么是自省? 在日常生活中,自省(introspection)是一种自我检查行为. 在计算机编程中,自省是指这种能力:检查某些事物以确定它是什么.它知道什么以及它能做什么.自省向程序员提供了极大的灵活 ...
- Python菜鸟之路:Python基础-线程、进程、协程
上节内容,简单的介绍了线程和进程,并且介绍了Python中的GIL机制.本节详细介绍线程.进程以及协程的概念及实现. 线程 基本使用 方法1: 创建一个threading.Thread对象,在它的初始 ...
- ElasticSearch(二十)定位不合法的搜索及其原因
GET /test_index/test_type/_validate/query?explain { "query": { "math": { "t ...
- abap Excel 导入
ABAP 将EXECL数据导入SAP内表的几个步骤. 本文转自:http://blog.csdn.net/szlaptop/article/details/8663451 http://www.c ...
- VS2015 下载 破解
Visual Studio Professional 2015简体中文版(专业版): http://download.microsoft.com/download/B/8/9/B898E46E-CBA ...
- 通过socket和Udp协议简单实现一个群体聊天工具(控制台)
编写一个聊天程序.有收数据的部分 和 发数据的部分.这两个部分需要同时执行,这就用到多线程技术,一个线程负责收,一个现象负责发. 因为收和发动作是不一致的,所以要定义两个run方法而且这两个方法要封装 ...