$1 \leq s \leq 60$个$2 \leq n \leq 10$的图,定义图的异或是:如果一条边在两个图中出现次数和为1,那么异或后的图中存在这条边,否则不存在。问有多少图的集合满足异或后的图是连通图。

暂时自己推不动的题系列QAQ

容斥一发,枚举点集划分,然后强行让在不同点集的点不连边而同一点集内的点随意。如此一来,假如有一种真实的方案,它把图真真切切的变成了$m$个连通块,那么这种方案会被统计$\sum_{i=1}^m\begin{Bmatrix} m \\  i \end{Bmatrix}$次,就是,每次把分完的点集合再拿去分集合,然后会分到若干大集合,然后因为大集合里的点是乱连的,所以会算到这种情况。需要系数$f(i)$,满足$\sum_{i=1}^m\begin{Bmatrix} m \\  i \end{Bmatrix} f(i)=[m=1]$。

用斯特林数递推求这个系数当然没问题,但打表后可得$f(i)=(-1)^{i-1}(i-1)!$,简要证明:

$\sum_{i=1}^{m}\begin{Bmatrix} m\\ i\end{Bmatrix}(-1)^{i-1}(i-1)!$
$\\ =\sum_{i=1}^{m}(-1)^{i-1}(i-1)!(\begin{Bmatrix} m-1\\ i-1\end{Bmatrix}+i\begin{Bmatrix} m-1\\ i\end{Bmatrix})$
$\\ =\sum_{i=1}^{m}(-1)^{i-1}(i-1)!\begin{Bmatrix} m-1\\ i-1\end{Bmatrix}+\sum_{i=1}^{m}(-1)^{i-1}i!\begin{Bmatrix} m-1\\ i\end{Bmatrix}$
$\\ =\sum_{i=0}^{m-1}(-1)^ii!\begin{Bmatrix} m-1\\ i\end{Bmatrix}+\sum_{i=1}^{m-1}(-1)^{i-1}i!\begin{Bmatrix} m-1\\ i\end{Bmatrix}$
$\\ =[m=1]$

好的0.0

然后一个点集划分怎么求满足的方案呢,把要的那几位提出来丢线性基里,异或出0的方案数就是$2^{S-cnt}$,$cnt$是线性基的大小。

 1 //#include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<math.h>
 5 //#include<time.h>
 6 //#include<complex>
 7 //#include<set>
 8 //#include<queue>
 9 #include<algorithm>
10 #include<stdlib.h>
11 using namespace std;
12
13 #define LL long long
14 int qread()
15 {
16     char c; int s=0; while ((c=getchar())<'0' || c>'9');
17     do s=s*10+c-'0'; while ((c=getchar())>='0' && c<='9'); return s;
18 }
19
20 //Pay attention to '-' , LL and double of qread!!!!
21
22 int n,S;
23 LL ans,f[22],a[66],b[66],two[66]; int list[22][22],len[22],bel[22];
24
25 struct JI
26 {
27     LL a[66]; int n,m;
28     void clear(int mm) {m=mm; n=0; memset(a,0,sizeof(a));}
29     void insert(LL v)
30     {
31         for (int i=m;~i;i--) if ((v>>i)&1)
32         {
33             if (!a[i]) {a[i]=v; n++; break;}
34             v^=a[i];
35         }
36     }
37 }ji;
38
39 void calc(int tot)
40 {
41     memset(b,0,sizeof(b));
42     int lb=0;
43     for (int i=1,pp=0;i<=n;i++)
44         for (int j=i+1;j<=n;j++,pp++)
45             if (bel[i]!=bel[j])
46             {
47                 for (int k=1;k<=S;k++) b[k]|=((a[k]>>pp)&1)<<lb;
48                 lb++;
49             }
50     ji.clear(lb-1);
51     for (int i=1;i<=S;i++) ji.insert(b[i]);
52     ans+=f[tot]*two[S-ji.n];
53 }
54
55 void dfs(int cur,int tot)
56 {
57     if (cur>n) {calc(tot); return;}
58     for (int i=1;i<=tot;i++)
59     {
60         bel[cur]=i;
61         list[i][++len[i]]=cur;
62         dfs(cur+1,tot);
63         len[i]--;
64     }
65     bel[cur]=tot+1;
66     list[tot+1][++len[tot+1]]=cur;
67     dfs(cur+1,tot+1);
68     len[tot+1]--;
69 }
70
71 char s[55];
72 int main()
73 {
74     S=qread();
75     for (int i=1;i<=S;i++)
76     {
77         scanf("%s",s); int m=strlen(s);
78         n=(int)(sqrt(1+8*m)+1.1)>>1;
79         for (int j=0;j<m;j++) a[i]|=(LL)(s[j]=='1')<<j;
80     }
81
82     {
83         LL fac=1; int fu=1;
84         for (int i=1;i<=n;i++)
85         {
86             f[i]=fac*fu;
87             fu=-fu; fac*=i;
88         }
89         two[0]=1; for (int i=1;i<=S;i++) two[i]=two[i-1]<<1;
90     }
91
92     ans=0; dfs(1,0);
93     printf("%lld\n",ans);
94     return 0;
95 }

View Code

转载于:https://www.cnblogs.com/Blue233333/p/8927184.html

BZOJ4671: 异或图相关推荐

  1. 斯特林反演[bzoj4671]异或图

    前言 继续学习容斥的技巧! 题意简介 题面链接 题目大意 定义两个无重边无自环图G1,G2G_1,G_2G1​,G2​的异或为G3G_3G3​(G1,G2,G3G_1,G_2,G_3G1​,G2​,G ...

  2. [BZOJ4671]异或图

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

  3. 【BZOJ 4671】异或图 【斯特林反演】【线性基】【贝尔数复杂度】

    传送门 题意:定义两个图的异或的边集为在两张图中恰出现一次的边.给sss张nnn个点的图的集合,求异或和为连通图的子集数. s≤60,n≤10s \leq 60,n \leq 10s≤60,n≤10 ...

  4. linux 往文件写4k大小,[svc]为何linux ext4文件系统目录默认大小是4k?

    linux ext4普通盘为什么目录大小是4k? Why does every directory have a size 4096 bytes (4 K)? To understand this, ...

  5. 退役前的做题记录5.0

    退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树 ...

  6. 2022图神经网络5篇最新的研究综述:双曲/图分类/联邦/等变/异质性

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 转载于"深度学习与图网络" 近年来,深度学习领域关于图神经网络(G ...

  7. 2022年5篇图神经网络最新的研究综述

    近年来,深度学习领域关于图神经网络(Graph Neural Networks,GNN)的研究热情日益高涨,图神经网络已经成为各大深度学习顶会的研究热点.GNN处理非结构化数据时的出色能力使其在网络数 ...

  8. 异质图综述 - Graph Neural Networks for Graphs with Heterophily: A Survey(CoRR 2022)

    论文链接: https://arxiv.org/pdf/2202.07082.pdf 目录 摘要 1 绪论 2 初步措施 3 具有异质性的 GNN 3.1 Non-local Neighbor Ext ...

  9. 基于Python的通用、可扩展的图卷积神经网络

    通用.可扩展的图卷积神经网络 一.背景介绍 图,作为计算机科学领域中一类重要的数据结构,提供了一种抽象表示事物 之间关系的方法.图结构包含两类主要元素--"节点"和"边& ...

最新文章

  1. python里unexpected eof while parsing_使用Python编程时的10个注意事项
  2. arcengine坐标转换[转]
  3. 《那些年啊,那些事——一个程序员的奋斗史》——117
  4. C++Primer再学习(3)
  5. PLSQL Developer中几个功能
  6. 重温6 ListView相关|单位dp/sp
  7. 解决:-bash: telnet: command not found
  8. php事务 面向对象,PHP面向对象之事务脚本模式(详解)
  9. 2G3G要退网了,但没必要着急换5G手机
  10. 爱情七十一课,低调恋爱
  11. angular 常用指令的使用
  12. c标签判断true false jsp_JSP 标准标签库(JSTL) | 菜鸟教程
  13. 计算机网络技术基础第二章答案,计算机网络技术基础各章节综合练习题及答案...
  14. 高程数据下载——DLR_SRTM_说明
  15. Map Reduce 四大组件
  16. 花呗、信用卡哪个用起来更方便?
  17. 夏普linux电视软件,夏普电视第三方软件安装方法,使用教程和攻略
  18. 地质勘查土质分类图片_土质的分类表
  19. switchhosts的作用
  20. inno setup安装制作软件详细使用步骤(含检测net版本环境)

热门文章

  1. 如何自学python到做项目-如何使用python进行第一个机器学习项目(详细教程篇)...
  2. 从零开始学习python-如何从零开始学python?
  3. php和python web开发-Web开发应该学习php还是python
  4. python在当前目录创建txt文件-python根据txt文本批量创建文件夹
  5. 电脑安装python失败-解决“Windows 7 Python3.6 安装失败”问题
  6. 自学python转行-转行Python,应该如何短期自学,达到就业水平
  7. python简单代码hello-PySide教程:一个简单的点击按钮示例
  8. php和python和java-python与java区别
  9. python绘制雷达图代码实例-python处理excel绘制雷达图
  10. python一个月能学成嘛-0基础学Python,1个月写爬虫,走了哪些弯路?