题目描述

  定义两个图\(G_1\)与\(G_2\)的异或图为一个图\(G\),其中图\(G\)的每条边在\(G_1\)与\(G_2\)中出现次数和为\(1\)。

  给你\(m\)个图,问你这\(m\)个图组成的集合有多少个子集的异或图为一个连通图。

  \(n\leq 10,m\leq 60\)

题解

  考虑枚举图的子集划分,让被划分到不同子集的点之间没有连边,而在同一个子集里面的点可以连通,可以不连通。

  可以用高斯消元(线性基)得到满足条件的图的个数。设枚举的子集划分有\(k\)个集合,那么容斥系数就是\({(-1)}^{k-1}(k-1)!\)。并把当前的方案数乘以容斥系数计入答案。

  那么容斥系数是怎么来的呢?

  记\(c_i\)为\(i\)个集合的容斥系数。对于每一个联通块个数为\(j\)的图,对枚举到的联通块个数为\(i\)的方案有\(S(j,i)\)的贡献。

  我们只需要让\(\sum_{i=m}^nc(i)S(i,m)=[m=1]\)就可以了。

  可以打表消元消除容斥系数。

  时间复杂度:\(O(B_nn^2m)\),其中\(B_n\)是Bell数的第\(n\)项。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
char s[1010];
int n,m;
ull a[20][20];
int d[20];
ull ans=0;
ull pw[70];
ull fac[70];
ull c[70];
void dfs(int x,int y)
{
if(x>n)
{
int i,j,k;
for(i=0;i<m;i++)
c[i]=0;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(d[i]!=d[j])
{
ll s=a[i][j];
for(k=m-1;k>=0;k--)
if(s&(1ll<<k))
{
if(!c[k])
{
c[k]=s;
break;
}
s^=c[k];
}
}
int num=0;
for(i=0;i<m;i++)
if(!c[i])
num++;
ans+=pw[num]*fac[y-1]*(y&1?1:-1);
return;
}
int i;
for(i=1;i<=y;i++)
{
d[x]=i;
dfs(x+1,y);
}
d[x]=y+1;
dfs(x+1,y+1);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
scanf("%d",&m);
int i,j,k;
int len;
fac[0]=1;
pw[0]=1;
for(i=1;i<=m;i++)
pw[i]=pw[i-1]<<1;
for(i=1;i<=m;i++)
{
scanf("%s",s+1);
if(i==1)
{
len=strlen(s+1);
for(j=2;j<=10;j++)
if(j*(j-1)/2==len)
break;
n=j;
}
int t=0;
for(j=1;j<=n;j++)
for(k=j+1;k<=n;k++)
if(s[++t]=='1')
a[j][k]|=1ll<<(i-1);
}
for(i=1;i<=n;i++)
fac[i]=fac[i-1]*i;
dfs(1,0);
printf("%llu\n",ans);
return 0;
}

【XSY2701】异或图 线性基 容斥原理的更多相关文章

  1. BZOJ 4671 异或图 | 线性基 容斥 DFS

    题面 Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 (u, v) 在 G 中 ...

  2. bzoj 2115 [Wc2011] Xor 路径最大异或和 线性基

    题目链接 题意 给定一个 \(n(n\le 50000)\) 个点 \(m(m\le 100000)\) 条边的无向图,每条边上有一个权值.请你求一条从 \(1\)到\(n\)的路径,使得路径上的边的 ...

  3. 51Nod1577 异或凑数 线性基 构造

    国际惯例的题面:异或凑出一个数,显然是线性基了.显然我们能把区间[l,r]的数全都扔进一个线性基,然后试着插入w,如果能插入,则说明w不能被这些数线性表出,那么就要输出"NO"了. ...

  4. 【loj114】k大异或和 线性基+特判

    题目描述 给由 $n​$ 个数组成的一个可重集 $S​$ ,每次给定一个数 $k​$ ,求一个集合 $T⊆S​$ ,使得集合 $T​$ 在 $S​$ 的所有非空子集的不同的异或和中,其异或和 $T_1 ...

  5. LOJ.114.K大异或和(线性基)

    题目链接 如何求线性基中第K小的异或和?好像不太好做. 如果我们在线性基内部Xor一下,使得从高到低位枚举时,选base[i]一定比不选base[i]大(存在base[i]). 这可以重构一下线性基, ...

  6. LOJ #113. 最大异或和 (线性基)

    题目链接:#113. 最大异或和 题目描述 这是一道模板题. 给由 \(n\) 个数组成的一个可重集 \(S\),每次给定一个数 \(k\),求一个集合 \(T \subseteq S\),使得集合 ...

  7. 51Nod1577 异或凑数 线性基

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1577.html 题意 给定一个长度为 n 的序列. 有 m 组询问,每一组询问给出 L,R,k ,询 ...

  8. 51nod 1577 异或凑数 线性基的妙用

    \(OTZgengyf\)..当场被吊打\(QwQ\) 思路:线性基 提交:\(3\)次 错因:往里面加数时\(tmp.p\)与\(i\)区分不清(还是我太菜了) 题解: 我们对每个位置的线性基如此操 ...

  9. [LOJ113] 最大异或和 - 线性基

    虽然是SB模板但还真是第一次手工(然而居然又被运算符优先级调戏了) #include <bits/stdc++.h> using namespace std; #define int lo ...

随机推荐

  1. 解决win7 win10上网卡慢问题

    在管理员身份运行CMD命令行,然后输入netsh interface tcp set global autotuninglevel=disable 即可.

  2. pycharm导入自己写的.py文件时,模块下方出现红色波浪线解决

    点击菜单栏的File,选择Setting, 然后,选择需要导入的.py文件“所在的目录",而非项目根目录,右键 之后再导入该.py文件就不会出现红色波浪线了.

  3. 1177: LFX学橙啦!题解

    问题如下:先给你一个含有N个整数的数组数组中的每一个元素只为1或者0而N的大小为1~100你可以删除一些元素(也可以选择不删除),使剩下的数组中,没有一个元素0在1后面出现.并且要使剩下的元素的数量最 ...

  4. 出题人的RP值(牛客练习赛38--A题)(排序)

    链接:https://ac.nowcoder.com/acm/contest/358/A来源:牛客网 题目描述 众所周知,每个人都有自己的rp值(是个非负实数),膜别人可以从别人身上吸取rp值. 然而 ...

  5. Xcode中控制台中打印中文处理

    xcode 10以后的方法,一般使用 #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"\n %s:%d %s\n", ...

  6. Jmeter之发送请求入参必须使用编码格式、Jmeter之发送Delete请求可能入参需要使用编码格式

    这里的其中一个属性值必须要先编码再传参才可以,具体可以通过抓包分析观察:

  7. jmeter 连接数据库测试笔记

    JDBC 常用mysql和oracal的jar包下载地址.jdbc driver class配置参考我的博客https://www.cnblogs.com/jackzz/p/9998975.html ...

  8. 【Python3练习题 010】将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    #参考http://www.cnblogs.com/iderek/p/5959318.html n = num = int(input('请输入一个数字:'))  #用num保留初始值 f = []  ...

  9. vue-router的简单实现原理

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. [转帖]SPU、SKU、ID,它们都是什么意思,三者又有什么区别和联系呢?

    SPU.SKU.ID,它们都是什么意思,三者又有什么区别和联系呢? http://blog.sina.com.cn/s/blog_5ff11b130102wx0p.html 电商时代,数据为王. 所以 ...