bzoj4671 异或图(斯特林反演,线性基)
bzoj4671 异或图(斯特林反演,线性基)
祭奠天国的bzoj。
题解时间
首先考虑类似于容斥的东西。
设 $ f_{ i } $ 为至少有 $ i $ 个连通块的方案数, $ g_{ i } $ 为正好有 $ i $ 个连通块的方案数。
那么有
\]
斯特林反演就有
\]
其中
\]
那么考虑求 $ f_{ i } $ 。
枚举所有可能的子集划分,复杂度为 $ Bell(n) $ ,
对于每个划分,要保证划分之间的边全部不存在,
由此得出异或方程组,设秩为 $ c $ ,则对答案贡献为 $ 2^{ s - c } $ 。
线性基解决。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
struct pat{int x,y;pat(int x=0,int y=0):x(x),y(y){}bool operator<(const pat &p)const{return x==p.x?y<p.y:x<p.x;}};
template<typename TP>inline void read(TP &tar)
{
TP ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){ret=ret*10+(ch-'0');ch=getchar();}
tar=ret*f;
}
template<typename TP,typename... Args>inline void read(TP& t,Args&... args){read(t),read(args...);}
namespace RKK
{
const int N=12,M=62;
int n,m,len;lint ans;
char str[114];
bool mp[M][N][N];
lint fac[N];
int bl[N];
lint b[M];
void dfs(int x,int cnt)
{
if(x>n)
{
int s=0;
for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(bl[i]!=bl[j])
{
lint val=0;
for(int k=1;k<=m;k++)if(mp[k][i][j]) val|=(1ll<<(k-1));
for(int k=1;k<=s;k++) if((val^b[k])<val) val^=b[k];
if(val) b[++s]=val;
}
ans+=fac[cnt]*(1ll<<(m-s));
return;
}
for(int i=1;i<=cnt+1;i++)
bl[x]=i,dfs(x+1,max(cnt,i));
}
int main()
{
read(m);for(int i=1;i<=m;i++)
{
scanf("%s",str+1);if(i==1){len=strlen(str+1);while(n*(n-1)/2!=len) n++;}
for(int j=1,o=0;j<=n;j++)for(int k=j+1;k<=n;k++) mp[i][j][k]=str[++o]-'0';
}
fac[1]=1;for(int i=2;i<=n;i++) fac[i]=fac[i-1]*(1-i);
dfs(1,0),printf("%lld\n",ans);
return 0;
}
}
int main(){return RKK::main();}
bzoj4671 异或图(斯特林反演,线性基)的更多相关文章
- BZOJ4671 异或图 斯特林反演+线性基
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4671 题解 半年前刚学计数的时候对这道题怀着深深的景仰,现在终于可以来做这道题了. 类似于一般 ...
- bzoj4671: 异或图——斯特林反演
[BZOJ4671]异或图 - xjr01 - 博客园 考虑先算一些限制少的情况 gi表示把n个点的图,划分成i个连通块的方案数 连通块之间不连通很好处理(怎么处理看下边),但是内部必须连通,就很难办 ...
- BZOJ4671 异或图(容斥+线性基)
题意 定义两个结点数相同的图 \(G_1\) 与图 \(G_2\) 的异或为一个新的图 \(G\) ,其中如果 \((u, v)\) 在 \(G_1\) 与 \(G_2\) 中的出现次数之和为 \(1 ...
- 【bzoj4671】异或图(容斥+斯特林反演+线性基)
传送门 题意: 给出\(s,s\leq 60\)张图,每张图都有\(n,n\leq 10\)个点. 现在问有多少个图的子集,满足这些图的边"异或"起来后,这张图为连通图. 思路: ...
- bzoj 4671 异或图——容斥+斯特林反演+线性基
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4671 考虑计算不是连通图的方案,乘上容斥系数来进行容斥. 可以枚举子集划分(复杂度是O(Be ...
- bzoj 4671 异或图 —— 容斥+斯特林反演+线性基
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4671 首先,考虑容斥,就是设 \( t[i] \) 表示至少有 \( i \) 个连通块的方 ...
- bzoj4671: 异或图
bzoj4671: 异或图 Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 ( ...
- BZOJ4671异或图
题目描述 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 (u, v) 在 G 中, 否则这条边不在 ...
- P5169 xtq的异或和(FWT+线性基)
传送门 我咋感觉我学啥都是白学-- 首先可以参考一下这一题,从中我们可以知道只要知道两点间任意一条路径以及整个图里所有环的线性基,就可以得知这两个点之间的所有路径的异或和 然而我好像并不会求线性基能张 ...
随机推荐
- 基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U VPX接口卡
一.板卡概述 标准VPX 3U板卡, 基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8.64b ...
- 使用JS简单实现一下apply、call和bind方法
使用JS简单实现一下apply.call和bind方法 1.方法介绍 apply.call和bind都是系统提供给我们的内置方法,每个函数都可以使用这三种方法,是因为apply.call和bind都实 ...
- Redis学习详解(一):Redis持久化机制之RDB
Redis的持久化机制有两种:RDB持久化和AOF持久化.因为Redis是一个内存数据库,如果没有合适的持久化机制,那么一旦服务器进程退出,服务器中的数据库状态也会消失.本章介绍RDB持久化机制. R ...
- 攻防世界Web_favorite_number
题目: 解题思路: 直接给php源码,代码审计. 这里需要通过POST方法传递参数stuff,且stuff是一组数组,给了一组数组array['admin','user'] if条件中,需要stuff ...
- DDD与数据事务脚本
DDD与数据事务脚本 扯淡 相信点进来看这篇文章的同学,大部分是因为标题里面的"DDD"所吸引!DDD并不是一个新技术,如果你百度一下它的历史就会知道,实际上它诞生于2004年, ...
- Java并发杂谈(一):volatile的底层原理,从字节码到CPU
volatile的特性 volatile是Java中用于修饰变量的关键字,其主要是保证了该变量的可见性以及顺序性,但是没有保证原子性:其是Java中最为轻量级的同步关键字: 接下来我将会一步步来分析v ...
- IMIX功能测试——网络测试仪实操
在真实的网络环境中,用户产生的网络数据报文的长度并不是固定的,也就要求我们在评估DUT转发能力时,不能仅仅测试固定长度的报文,而是需要测试多种不同报文长度的组合. 信而泰RENIX测试仪中的iMIX报 ...
- BGP协议测试—信而泰网络测试仪实操
关键词 BGP; 协议仿真; 测试原理. 前言:当前信息化时代之下,数据传输已经成为了日常工作和生活必不可少的重要组成部分,网络服务的易得性和可靠性也因此得到广泛关注.这其中负责网络正常工作的诸多协 ...
- 你别告诉我你还在用Excel做数据透视分析吧,太low了!
来到大数据分析的时代,大量的大数据分析软件涌现,尽管如此,如果今天有人问起最常用的数据透视分析工具是什么的时候,我猜想Excel应该是大家的不二之选. 但是其实我想说,用现在的手机来打比方,Excel ...
- 运行jar包使用外部依赖
nohup java -Dloader.path="lib/" -Dfile.encoding=utf-8 -jar test.jar > test.out 2>&am ...