题目描述

定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与
G2 中的出现次数之和为 1, 那么边 (u, v) 在 G 中, 否则这条边不在 G 中.
现在给定 s 个结点数相同的图 G1...s, 设 S = {G1, G2, . . . , Gs}, 请问 S 有多少个子集的异
或为一个连通图?
题解
先考虑一个dp。
对于这种连通性问题的dp我们通常是设一个f数组一个g数组,然后找到这两个数组的关系。
我们定义g[i]表示恰好有i个联通块的方案数(是指把点集分割成i个集合,不同集合之间不能连边,相同集合之间连通)。
考虑再设置f[i]表示至少有i个联通块的方案数(同上,只是相同集合之间也可以不连通)。
那么我们的转移有:f[i]=∑s(j,i)g[j]
由于我们要求g,就斯特林反演一下。
g[i]=∑(-1)j-iS(j,i)f[j]
其实我们只需要求g[1]
g[1]=∑(-1)i-1S(i,1)f[i]
g[1]=∑(-1)i-1(i-1)!f[i]
我们可以以贝尔数的复杂度枚举这n个点的集合划分,然后算出有多少种图的选择方案可以保证不同集合之间没有连边。
对于每一条跨越集合中的边,我们可以写出一个方程。
a1G1^a2G2^a3G3.....=0
ai为0/1表示这条边是否在Gi这张图中存在。
它显然是有解的(全取0就可以了
我们要做的是求解得个数,答案为2自由元
我们可以用线性基来模拟高斯消元的过程,自由元的个数就是最后线性基中0的个数。
代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
ll jie[],be[],n,G,x[],ans;
char s[];
int g[][][];
inline int rd(){
int x=;char c=getchar();bool f=;
while(!isdigit(c)){if(c=='-')f=;c=getchar();}
while(isdigit(c)){x=(x<<)+(x<<)+(c^);c=getchar();}
return f?-x:x;
}
void solve(int now,int cnt){
if(now>n){
for(int i=;i<=n;++i)
for(int j=i+;j<=n;++j)if(be[i]!=be[j]){
ll tmp=;
for(int k=;k<=G;++k)tmp|=(1ll*g[k][i][j]<<k-);
for(int k=G-;k>=;--k)if(tmp&(1ll<<k)){
if(!x[k]){x[k]=tmp;break;}
tmp^=x[k];
}
}
int num=;
for(int i=;i<G;++i)if(x[i])num++;
ans+=((cnt&)?:-)*(1ll<<(G-num))*jie[cnt-];
for(int i=;i<G;++i)x[i]=;
}
else{
for(int j=;j<=cnt+;++j){be[now]=j;solve(now+,max(cnt,j));}
}
}
int main(){
G=rd();
for(int i=;i<=G;++i){
scanf("%s",s+);
n=strlen(s+);
n=(+sqrt(+*n))/;int now=;
for(int j=;j<=n;++j)for(int k=j+;k<=n;++k){g[i][j][k]=s[now]-'';now++;}
}
jie[]=;
for(int i=;i<=n;++i)jie[i]=jie[i-]*i;
solve(,);
cout<<ans;
return ;
}

BZOJ4671异或图的更多相关文章

  1. bzoj4671: 异或图——斯特林反演

    [BZOJ4671]异或图 - xjr01 - 博客园 考虑先算一些限制少的情况 gi表示把n个点的图,划分成i个连通块的方案数 连通块之间不连通很好处理(怎么处理看下边),但是内部必须连通,就很难办 ...

  2. bzoj4671: 异或图

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

  3. bzoj4671 异或图(斯特林反演,线性基)

    bzoj4671 异或图(斯特林反演,线性基) 祭奠天国的bzoj. 题解时间 首先考虑类似于容斥的东西. 设 $ f_{ i } $ 为至少有 $ i $ 个连通块的方案数, $ g_{ i } $ ...

  4. BZOJ4671 异或图(容斥+线性基)

    题意 定义两个结点数相同的图 \(G_1\) 与图 \(G_2\) 的异或为一个新的图 \(G\) ,其中如果 \((u, v)\) 在 \(G_1\) 与 \(G_2\) 中的出现次数之和为 \(1 ...

  5. BZOJ4671 异或图 斯特林反演+线性基

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4671 题解 半年前刚学计数的时候对这道题怀着深深的景仰,现在终于可以来做这道题了. 类似于一般 ...

  6. 【BZOJ4671】异或图(斯特林反演)

    [BZOJ4671]异或图(斯特林反演) 题面 BZOJ Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出 ...

  7. 【XSY2701】异或图 线性基 容斥原理

    题目描述 定义两个图\(G_1\)与\(G_2\)的异或图为一个图\(G\),其中图\(G\)的每条边在\(G_1\)与\(G_2\)中出现次数和为\(1\). 给你\(m\)个图,问你这\(m\)个 ...

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

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

  9. 【bzoj4671】异或图(容斥+斯特林反演+线性基)

    传送门 题意: 给出\(s,s\leq 60\)张图,每张图都有\(n,n\leq 10\)个点. 现在问有多少个图的子集,满足这些图的边"异或"起来后,这张图为连通图. 思路: ...

随机推荐

  1. ARM汇编指令集_学习笔记(1)

    一.什么是ARM汇编? 运行在ARM处理器上的汇编语言就叫ARM汇编. C程序运行在X86平台,底层就是X86汇编:运行在ARM平台,底层就是ARM汇编.ARM汇编与X86汇编有显著区别. X86属于 ...

  2. jQuery省市区三级联动菜单

    <style> select{ padding:5px 0; } .outer{ width:500px; margin:20px auto; } </style> <d ...

  3. matlab练习程序(神经网络识别mnist手写数据集)

    记得上次练习了神经网络分类,不过当时应该有些地方写的还是不对. 这次用神经网络识别mnist手写数据集,主要参考了深度学习工具包的一些代码. mnist数据集训练数据一共有28*28*60000个像素 ...

  4. Android预置Apk方法

    这一套8.0过时了 需要修改pms代码 否则apk会被pms删除掉 因为工作需要,经常要开发和合入系统App,所以在此开篇作为收集和记录Android合入系统应用的方法,以备日后查阅. 一.预置apk ...

  5. CTS问题分析6

    遇到一个Android P相关的问题,和原来CTS/GTS 问题分析1的表现是一样的,但是将 这个修复cp过来,发现不生效,仍然报错,因此记录一下 问题初探 测试命令: run gts -m GtsG ...

  6. SQL Server GUID 数据迁移至MongoDB后怎样查看?

    关键字:SQL Server NEWID():BSON:MongoDB UUID 1.遇到的问题和困惑 SQL Server中的NEWID数据存储到MongoDB中会是什么样子呢?发现不能简单的通过此 ...

  7. ASP.NET Zero--Migration控制台应用程序

    Migration控制台应用程序 AspNet Zero包含一个工具Migrator.exe,用于轻松迁移数据库.您可以运行此应用程序来创建/迁移host和租户数据库. 该应用程序从它自己的appse ...

  8. IOS判断NSArray是否为空

    场景描述:判断一个集合是否为空,如果不为空执行A,如果为空执行B Java实现方法 public void exec(){ List<String> list = this.getCont ...

  9. gpio led学习

    2.弄清楚寄存器,gpio等之间的关系,to thi tha 比如: https://www.ggdoc.com/bGludXggZ3Bpb_aTjeS9nA2/NmIzNDIyZGZmMTExZjE ...

  10. Cloudera Manager和CDH5.8离线安装

    https://blog.csdn.net/zzq900503/article/details/52982828 简介 我们在上篇文章中已经了解了CDH,为了后续的学习,我们本章就来安装CDH5.8. ...