传送门

题意:定义两个图的异或的边集为在两张图中恰出现一次的边。给sss张nnn个点的图的集合,求异或和为连通图的子集数。

s≤60,n≤10s \leq 60,n \leq 10s≤60,n≤10

设GiG_iGi​表示异或出iii个连通块的子集数,答案就是G1G_1G1​

GGG并不好求废话,我们考虑一个看起来很对的求法:

虽然边很多但点很少, 我们可以暴力枚举连通块中的点,复杂度是O(B(n))O(B(n))O(B(n)),BBB为贝尔数,B(10)=21147B(10)=21147B(10)=21147

可以确定的是不同连通块间没有边,但连通块间仍然不好确定,所以不能叫连通块。为了区分,我们把枚举出来的称为「集合」。

设FiF_iFi​为异或出iii个集合的子集数,即只要求不同集合间没有边,同一集合间没有要求没有要求。

发现GGG可以表示出FFF:因为FFF的每个「集合」一定是若干连通块构成的非空集合,即一个斯特林数

Fm=∑i=mn{im}GiF_m=\sum_{i=m}^n\left\{\begin{matrix}i\\m\end{matrix}\right\}G_iFm​=i=m∑n​{im​}Gi​

斯特林反演一波

Gm=∑i=mn(−1)i−m[im]FiG_m=\sum_{i=m}^n(-1)^{i-m}\left[\begin{matrix}i\\m\end{matrix}\right]F_iGm​=i=m∑n​(−1)i−m[im​]Fi​

答案为

G1=∑i=1n(−1)i−1[i1]Fi=∑i=1n(−1)i−1(i−1)!FiG_1=\sum_{i=1}^n(-1)^{i-1}\left[\begin{matrix}i\\1\end{matrix}\right]F_i \\=\sum_{i=1}^n(-1)^{i-1}(i-1)!F_iG1​=i=1∑n​(−1)i−1[i1​]Fi​=i=1∑n​(−1)i−1(i−1)!Fi​

现在我们只需要求出FFF

枚举出集合后,只考虑所有图中跨集合的边(实现时取个&即可),然后需要求出多少个子集异或和为000

把所有图插进线性基,设最终大小为sizsizsiz,那么自由元个数为s−sizs-sizs−siz。首先只含线性基中元素的非空子集不会有贡献,然后对于任意自由元的子集,根据线性基的定义,都可以找到一个线性基的子集把它异或成000。

算GGG的过程中可能会爆ll,但反正最终答案在范围内,溢出就溢出吧。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
typedef long long ll;
int s,n;
char t[100];
ll h[100],bas[100],f[100],ans;
int col[100];
inline void insert(ll x)
{for (int i=60;i>=0;i--)if (x&(1ll<<i))if (bas[i]) x^=bas[i];else return (void)(bas[i]=x);
}
void dfs(int k,int c)
{if (k>n){ll d=0;for (int i=1,cnt=0;i<n;i++)for (int j=i+1;j<=n;j++,cnt++)if (col[i]!=col[j])d|=1ll<<cnt;memset(bas,0,sizeof(bas));for (int i=1;i<=s;i++) insert(h[i]&d);int cnt=0;for (int i=0;i<=60;i++) cnt+=(bas[i]>0);f[c]+=1ll<<s-cnt;return;}for (col[k]=1;col[k]<=c;col[k]++,dfs(k+1,c));col[k]++,dfs(k+1,c+1);
}
int main()
{scanf("%d",&s);for (int i=1;i<=s;i++){scanf("%s",t);for (int j=strlen(t)-1;j>=0;j--) h[i]=(h[i]<<1)^(t[j]^48);}int len=strlen(t);for (n=1;n*(n-1)/2<len;n++);dfs(1,0);ll fac=1;for (int i=1;i<=n;fac*=i,i++) ans+=((i&1)? 1:-1)*fac*f[i];printf("%lld\n",ans);return 0;
}

【BZOJ 4671】异或图 【斯特林反演】【线性基】【贝尔数复杂度】相关推荐

  1. 《小学生都能看懂的三类斯特林数从入门到升天教程 》(含性质完整证明、斯特林反演、拉赫数)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 真的特别简单,我尽量讲的详细一些,本文包含了几乎所有性质定理证明,老少皆宜 ~ 内容过多,质量过硬,建 ...

  2. YbtOJ-连通的图【结论,线性基】

    正题 题目大意 给出nnn个点n+k−1n+k-1n+k−1条边的一张图,求有多少种删除若干条边的方案使得图依旧联通. 1≤n≤105,1≤k≤101\leq n\leq 10^5,1\leq k\l ...

  3. P5169 xtq的异或和(FWT+线性基)

    传送门 我咋感觉我学啥都是白学-- 首先可以参考一下这一题,从中我们可以知道只要知道两点间任意一条路径以及整个图里所有环的线性基,就可以得知这两个点之间的所有路径的异或和 然而我好像并不会求线性基能张 ...

  4. BZOJ 4269: 再见Xor [高斯消元 线性基]

    4269: 再见Xor Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 我太愚蠢了连数组开小了以及$2^{ ...

  5. 区间子集最大/最小异或和问题(线性基,树上差分)

    闲话 有这样一个问题--一个长度为\(n\)的序列\(a_1-a_n\),\(q\)个询问,每次询问\(l,r\),选出\(\{a_l,a_{l+1}...a_{r}\}\)中一个子集使得子集内元素异 ...

  6. bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛

    Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...

  7. 【HDU3949 + BZOJ2115 + CF724G】【异或线性基例题】| 倍增 | 第k小异或和 | DFS处理环 |【CGWR】| N

    三道关于异或线性基的有趣的题目 [1] HDU 3949. XOR Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3276 ...

  8. BZOJ 2844 | HYSBZ - 2844albus就是要第一个出场——线性基

    [题目描述] BZOJ 2844 | HYSBZ - 2844albus [题目分析] 题目的意思大概是给一个数列,他有2n个子集,每个子集的元素的异或和构成新的一个数列,排序后问数字Q在这个序列里面 ...

  9. BZOJ 2115 [Wc2011] Xor ——线性基

    [题目分析] 显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可. 但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有 ...

最新文章

  1. util.promisify 的那些事儿
  2. [《孔雀》观后]聪明的孩子提着易碎的灯笼
  3. EXT.NET GridPanel展开与收缩
  4. 机器学习实战读书笔记--决策树
  5. Ansible中的角色使用
  6. 工作399-openType=“getUserInfo“ lang=“zh_CN“ bindgetuserinfo=“getUserInfo“
  7. OpenSessionInViewFilter 对 lazy 加载 的配置及作用
  8. 涨知识了!阿里、百度、腾讯的名字竟然是这样来的
  9. android - 调用系统分享功能分享图片
  10. node 获取表单数据 为空_寻offer之JS数据结构与算法 -- 栈
  11. 苹果手表计算机功能键,认识Mac的功能键,最值得你记住的苹果电脑快捷键列表...
  12. uni-app实现上传照片和个人信息
  13. Laravel学习 - Eloquent\Builder与Query\Builder
  14. Mybatis学习一
  15. 完犊子了,微软已禁止俄罗斯人下载 Windows
  16. 解决ngress-nginx-controller 报错问题
  17. 华为nova10和华为nova9哪个值得买 两者配置对比
  18. MTK平台MT6765 LCM屏调试步骤
  19. PCB抄板、PCB打样、PCB反推原理图、PCB设计
  20. 基于安卓的英语四级单词学习智力游戏android

热门文章

  1. 软件测试实验报告下载 实验一到实验五
  2. 这10个人,总是牛逼的无话可说
  3. 学习爬虫限时只需9.9,还在犹豫什么?
  4. 和哪个专业的男生谈恋爱最惨?
  5. 算法有偏见?总比人类识别强吧!
  6. 陶哲轩的10岁与30岁
  7. 推荐系统中协同过滤算法实现分析
  8. github怎么隐藏自己的pr记录_记便签的软件哪个好?怎么及时记录自己的想法
  9. float型y取值在1.0c语言表达式,2011年全国计算机二级C语言模拟试题及答案(14)...
  10. c语言字符比较思路,C语言讲解思路资料