博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[THUWC2017]随机二分图
阅读量:4632 次
发布时间:2019-06-09

本文共 1155 字,大约阅读时间需要 3 分钟。

题目大意

给一张二分图,有左部点和右部点。

有三种边,第一种是直接从左部点连向右部点,出现概率为50%。

第二种边一组里有两条边,这两条边同时出现或者不出现,概率都是50%。

第三种边一组里有两条边,这两条边只能出现一条,概率都是50%。

求这张图完美匹配数的期望

题解

一条边能够带来贡献的条件不是它出现了,而是它出现在了匹配中。所以我们应当直接计算每条边出现在最大匹配中的概率。

第一种边不用研究。

第二种边每一条条边出现在最大匹配中的概率都是50%。

两条边出现在最大匹配中的概率也是50%。

如果我们直接连两条50%的边的话,两条边同时出现的概率就是25%。

所以我们补一条两组的边,概率为25%。

第三种边同理,两条边出现在最大匹配中的概率是0%。

所以我们补一组-25%的边就好了。

dp的话,拿map记搜一下就好了。

代码

#include
#include
#include
#define N 16using namespace std;typedef long long ll;const int mod=1e9+7;map
mp;map
::iterator it; int lo[1<
>=1; } return ans;}inline void MOD(ll &x){ while(x>=mod)x-=mod;}struct edge{ int n,to,l;}e[N*N*2];inline void add(int u,int v){ int loo=lo[u&(-u)]; e[++tot].n=head[loo];e[tot].to=u;head[loo]=tot;e[tot].l=v;}int DP(int s){ if(!s)return 1; it=mp.find(s); if(it!=mp.end())return it->second; int loo=lo[s&(-s)];ll ans=0; for(int i=head[loo];i;i=e[i].n){ int v=e[i].to;if((v&s)!=v)continue; ans+=1ll*DP(s^v)*e[i].l%mod;MOD(ans); } return mp[s]=ans;}int main(){ n=rd();m=rd();int u1,v1,u2,v2,ma=(1<

 

转载于:https://www.cnblogs.com/ZH-comld/p/10297240.html

你可能感兴趣的文章
Linux 之根目录介绍
查看>>
iOS学习之代码块(Block)
查看>>
十三种迹象表明百度取消新闻源势在必行的趋势
查看>>
vue初识(一)
查看>>
jQuery版本升级踩坑大全
查看>>
nginx+tomcat实现Windows系统下的负载均衡搭建的案例
查看>>
checkstyle.xml Code Style for Eclipse
查看>>
Docker2之Service
查看>>
总结技术人生的第一个“五年计划”
查看>>
linux (一)
查看>>
名不正,则言不顺
查看>>
实验报告四
查看>>
wp8公司帐号申请注意事项
查看>>
PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码
查看>>
.Net程序员学用Oracle系列(14):子查询、集合查询
查看>>
contest16 CF315 div2+div1F oooxox oooxox oooooo
查看>>
ubuntu下如何用命令行运行deb安装包
查看>>
luacom cygwin
查看>>
『ACM C++』 PTA 天梯赛练习集L1 | 044-45
查看>>
Duilib
查看>>