传送门

直接求连通的不好做,考虑容斥

设 \(g_i\) 表示至少有 \(i\) 个连通块的方案数,\(f_i\) 表示恰好有 \(i\) 个的

那么

\[g_x=\sum_{i=x}^{n}\begin{Bmatrix}x \\ i\end{Bmatrix}f_i\iff f_x=\sum_{i=x}^{n}(-1)^{i-x}\begin{bmatrix}x \\ i\end{bmatrix}g_i
\]

那么

\[f_1=\sum_{i=1}^{n}(-1)^{i-1}(i-1)!g_i
\]

求 \(g\)

考虑枚举点的拆分,相当于是不同的集合之没有边,这部分直接用线性基求出方案

# include <bits/stdc++.h>
using namespace std;
typedef long long ll; int n = 1, graph[65][15][15], m, id[15];
char ch[2333];
ll fac[15], ans, bc[65], v; void Dfs(int x, int f) {
register int i, j, k, tot, num;
if (x > n) {
memset(bc, 0, sizeof(bc)), num = 0;
for (i = 1; i <= m; ++i) {
for (v = tot = 0, j = 1; j <= n; ++j)
for (k = j + 1; k <= n; ++k)
if (id[j] != id[k]) v |= (ll)graph[i][j][k] << tot, ++tot;
for (j = 0; j < tot; ++j)
if (v >> j & 1) {
if (!bc[j]) {
bc[j] = v, ++num;
break;
}
v ^= bc[j];
}
}
ans += (ll)((f & 1) ? 1 : -1) * fac[f - 1] * (1ll << (m - num));
return;
}
for (i = 1; i <= f + 1; ++i) id[x] = i, Dfs(x + 1, max(i, f));
} int main() {
register int i, j, k, len, cnt;
for (scanf("%d", &m), i = 1; i <= m; ++i) {
scanf(" %s", ch + 1), len = strlen(ch + 1);
while (n * (n - 1) / 2 < len) ++n;
for (cnt = 0, j = 1; j <= n; ++j)
for (k = j + 1; k <= n; ++k) graph[i][j][k] = ch[++cnt] - '0';
}
for (fac[0] = 1, i = 1; i <= n; ++i) fac[i] = fac[i - 1] * i;
Dfs(1, 0), printf("%lld\n", ans);
return 0;
}

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异或图

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. (转)史上最全的MSSQL复习笔记

    1.什么是SQL语句 sql语言:结构化的查询语言.(Structured Query Language),是关系数据库管理系统的标准语言. 它是一种解释语言:写一句执行一句,不需要整体编译执行.语法 ...

  2. (转)分布式中使用Redis实现Session共享(一)

    上一篇介绍了如何使用nginx+iis部署一个简单的分布式系统,文章结尾留下了几个问题,其中一个是"如何解决多站点下Session共享".这篇文章将会介绍如何使用Redis,下一篇 ...

  3. (转)MySQL高可用解决方案

    MySQL高可用解决方案 原文:http://www.ywnds.com/?p=5565 有这么两个概念,数据库的可靠性和数据库的可用性,可靠性指的是数据可靠,而可用性指的是服务可用.但是不管是可靠性 ...

  4. MySQL设置远程连接服务器

    默认情况下,mysql只允许本地登录,如果要开启远程连接,则需要修改/etc/mysql/my.conf文件. 一.修改/etc/mysql/my.conf找到bind-address = 127.0 ...

  5. 【数组】Unique Paths

    题目: A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...

  6. django notes 五:Writing models

    models 其实也没什么好说的,就是普通的 python 类 settings 中配置数据库连接 DATABASES = { 'default': { 'ENGINE': 'django.db.ba ...

  7. DOS命令行操作MySQL数据库中文乱码问题解决

    我们在 dos 命令行操作中文时,会报错 ’); ERROR (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 原因:因为 ...

  8. docker私有仓库搭建及认证

    什么是docker? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机 ...

  9. MYSQL的NOW和SYSDATE函数的区别

    在MySQL Performance Blog博客上看到一篇文章介绍now()和sysdate()函数. 想起很多朋友专门问在MySQL里面提供now()和sysdate()函数,都是表示取得当前时间 ...

  10. mysql8安装配置备忘

    Mysql8安装配置 1. 初始化 进入mysql安装目录中的bin目录,在cmd中输入: mysqld --initialize --console 加上--console参数可以看到初始化之后的默 ...