当前位置: 首页 > news >正文

*题解:P6442 [COCI 2011/2012 #6] KOŠARE

题目链接

解析

题目等价于给定 \(n\) 个集合,求选出来的集合的并等于全集的方案数。

考虑容斥。记 \(P_i\) 表示第 \(i\) 个元素在最终集合里的选法,那么要求即为 \(\left| \bigcap_{i=1}^{m}P_i\right|\)。记 \(Q_i\) 表示第 \(i\) 个元素在最终集合里的选法,那么有 \(\left| \bigcap_{i=1}^{m}P_i\right|=\left| U\right| - \left| \bigcup_{i=1}^{m}Q_i\right|\),其中 $ \left| \bigcup_{i=1}^{m}Q_i\right|$ 代表至少有一个元素不在最终集合里的选法个数, \(U\) 为全集

问题变为求 $ \left| \bigcup_{i=1}^{m}Q_i\right|$。由容斥原理,我们有:

\[\left| \bigcup_{i=1}^{m}Q_i\right| =\sum_{\emptyset \not=S \subseteq [1,m]\cap \mathbb{Z}}(-1)^{\lvert S\rvert - 1}\left| \bigcap_{j\in S}Q_j\right| \]

\(f_S=\left| \bigcap_{j\in S} Q_j\right|\) 表示选出来的集合并中不含 \(S\) 中元素的方案数。并中不含 \(S\) 中元素又意味着补集的交中含有所有 \(S\) 中元素。设 \(g_S\) 表示补集中含有所有 \(S\) 中元素的集合个数,那么 \(f_S = 2^{g_S}\)

对于 \(g_S\),有 \(g_S=\sum_{S\subseteq T} h_T\),其中 \(h_T\) 表示补集为 \(T\) 的集合个数。使用 SOSDP 求解,时间复杂度 \(O(m2^m)\)

事实上,我们有 \(\bigcap_{i \in \emptyset}Q_i=U\),可以理解为限制集合为空所以没有任何限制,所以:

\[\sum_{\emptyset \not=S \subseteq [1,m]\cap \mathbb{Z}}(-1)^{\lvert S\rvert - 1}\left| \bigcap_{j\in S}Q_j\right|=\sum_{S \subseteq [1,m]\cap \mathbb{Z}}(-1)^{\lvert S\rvert - 1}\left| \bigcap_{j\in S}Q_j\right|+\left| U \right| \]

于是:

\[\begin{aligned} \left| U\right| - \left| \bigcup_{i=1}^{m}Q_i\right| &= \left| U\right| - (\sum_{S \subseteq [1,m]\cap \mathbb{Z}}(-1)^{\lvert S\rvert - 1}\left| \bigcap_{j\in S}Q_j\right|+\left| U \right|)\\ &=- (\sum_{S \subseteq [1,m]\cap \mathbb{Z}}(-1)^{\lvert S\rvert - 1}\left| \bigcap_{j\in S}Q_j\right|)\\ &= \sum_{S \subseteq [1,m]\cap \mathbb{Z}}(-1)^{\lvert S\rvert}\left| \bigcap_{j\in S}Q_j\right| \end{aligned} \]

由此可以衍生出不同的实现方法。

代码

/*
此代码根据最后推出的式子实现。
*/
#include <bits/stdc++.h>
#define eps 0.0000000001
#define ls(x) ((x) << 1)
#define rs(x) (((x) << 1) | 1)
//#define mid ((l + r) >> 1)
using namespace std;
typedef long long ll;
typedef unsigned ui;
typedef pair<int,int> pii;
const int N = (1 << 20) + 5,M = 15,P = 2000000,mod = 1e9 + 7,mod2 = 1e9 + 7,b1 = 131,b2 = 13331;
int f[N],g[N];
int mi2[N];
signed main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);mi2[0] = 1;for(int i=1;i<N;i++){mi2[i] = mi2[i - 1] * 2ll % mod;}int n,m;cin>>n>>m;for(int i=1;i<=n;i++){int k;cin>>k;int y = (1 << m) - 1;for(int j=1;j<=k;j++){int x;cin>>x;x--;y ^= (1 << x);}g[y]++;}for(int i=0;i<m;i++){for(int j=0;j<(1 << m);j++){if(!(j & (1 << i))){g[j] += g[j ^ (1 << i)];}}}int res = 0;for(int i=0;i<(1 << m);i++){f[i] = mi2[g[i]];int p = __builtin_popcount(i) % 2 == 0 ? 1 : -1;res = (res + mod + 1ll * p * f[i]) % mod;}cout<<res;return 0;
}
http://www.gsyq.cn/news/1526687.html

相关文章:

  • 除了Confluence和语雀,企业知识库还有第三种选择
  • AMD Ryzen系统调试工具SMUDebugTool深度解密:硬件级精准控制技术实现
  • 如何快速掌握LibreDWG:免费DWG文件转换的终极指南
  • 微信聊天记录永久备份终极指南:WeChatExporter开源工具深度解析
  • 虚拟测绘实战:用SF600+RTK手簿完成一次完整的无人机倾斜摄影建模前期工作
  • Anaconda3安装路径选C盘还是D盘?实测不同盘符对性能和包管理的影响
  • 2026广州电商财税合规公司排行:标杆服务能力实测对比 - 互联网科技品牌测评
  • 3分钟免费解锁IDM完整版:开源激活脚本终极指南
  • 告别重复操作!StarRailCopilot让你轻松玩转《崩坏:星穹铁道》
  • 终极LRC歌词批量下载工具:10分钟搞定数千首离线音乐歌词同步
  • 3分钟快速上手:终极中文文献管理插件Jasminum完全指南
  • 从PyTorch转战Rust?tch-rs、Candle、Burn、DFDX保姆级上手体验对比
  • 3分钟搞定Windows C/C++开发环境:w64devkit终极便携解决方案
  • Go学习第8天:接口 + 泛型 + 错误处理
  • 别再纠结C#和Qt了!从零到一,用.NET MAUI搞定你的第一个跨平台桌面App
  • 青岛配眼镜哪里好,适合什么人选镜指南 - 配眼镜新资讯
  • TV Bro浏览器:智能电视上网的终极解决方案
  • 2026年6月常州GEO/SEO全链路服务商评测:十家头部公司推荐榜单 - 936品牌测评网
  • 保姆级教程:用MoveIt Setup Assistant配置你的第一个URDF机器人模型(含Gazebo文件生成避坑)
  • YOLO小目标检测救星:实测CARAFE对比双线性插值/反卷积,mAP提升多少?
  • Pandas数据清洗六大实战Hack:性能优化与工程化实践
  • 【技术干货】Kimi K2.7 Code 深度拆解:MCP工具调用超越Claude,开源编程模型新标杆
  • Claude Code 实战:AI 结对编程如何真正提效:从踩坑到可复用方案
  • 深耕广东房企资质服务赛道,广州融景企业管理集团打造房地产开发二级资质代办标杆品牌 - 广东科技观察
  • 2026年液位计厂家推荐排行榜:吉林磁翻板/玻璃管/浮球/雷达/超声波/防爆/就地/水箱/储罐/工业/污水池液位计品牌深度测评 - 品牌发掘
  • AI CAD图纸一秒检索怎么实现
  • 2026中国薪酬咨询机构专业评测:从体系搭建到改革落地的实战指南 - 互联网科技品牌测评
  • 弥赛亚叙事:学术赵高,数学鬼才,牛顿封神的认知病毒
  • 如何彻底解决Windows和Office激活问题:KMS_VL_ALL_AIO智能激活方案完全指南
  • 把二维照片变成能旋转查看的3D模型,做设计搞开发玩创意的都值得试试