连通性容斥

一种比较牛的东西,典型标志为 n18,计数满足特殊性质而且连通的状物。

[ARC105F]

有一张 n 个点 m 条边的简单无向图,问选出一个边集,使得 n 个点与这些边构成的图连通,并且图是二分图的方案数。

1n17,n1mn(n1)2

通用套路是先不理连通算方案数,设 hS 表示有多少条边两端点都在集合 S 中。

一个图是二分图的充要条件是恰好能将图黑白染色,那我们枚举集合中为黑色的子集,设 gS 为图是二分图的方案数。

那么有 gS=tS2hShThST 即黑白两色内部不能染色。

接下来剪掉不连通的,这个就是连通性容斥套路,设 fS 为最终集合的答案。

我们钦定一个集合 S 中的最小点为连通块的根,(任意的点都可以,只是最小的点用 lowbit 方便计算)。

我们枚举当前这个最小点当前所在连通块集合 T,那么它对当 S 的贡献要减去 fT×gTS 即当前连通块答案乘上不在当前块中任意算边的方案。

所以 fS=gSTSlowbit(T)=lowbit(S)fT×gTS

复杂度 O(3n)

[ABC321G]

n 个点,给定两个长度为 m 的序列 ai,bi

对于一个 1m 的排列 P,将 aibPi 连边后,其权值定义为这 n 个点 m 条边所构成的图的连通块个数。

对于所有 m! 个排列 P,求它们权值的期望值。

1n17,1 m105

典中典之先期望转计数。

还是先啥都不管设 haS,hbS 分别表示 S 的子集中有出现了多少 ai,bi,设 hS 表示只在集合 S 互相连边的方案数。

显然有 hS=[haS=hbS]haS!,然后使用连通性容斥设 gS 表示使得集合 S 连通的方案数。

和上题类似,gS=hSTSlowbit(T)=lobit(S)gT×hTS

接下来设 fS 表示集合 S 所有方案连通块数量之和,仍然需要枚举有集合最小值的子集 T 作为最后一块加入集合(不钦定要算重)

那么也就有 fS=TSlowbit(T)=lowbit(S)gj×fTS+gj×hTS

前后两部分分别代表新加入的连通块对方案数和连通块数量的贡献。

复杂度 O(3n)

这种题目需要注意的是枚举子集是否空集以及全集,需要画图慢慢理解一下。

Upd:这种题通过一些神妙的数学手段也许能变得更优,等实力变强了再来补。

posted @   Hanghang007  阅读(145)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示