BZOJ4671 异或图(容斥+线性基)】的更多相关文章

题意 定义两个结点数相同的图 \(G_1\) 与图 \(G_2\) 的异或为一个新的图 \(G\) ,其中如果 \((u, v)\) 在 \(G_1\) 与 \(G_2\) 中的出现次数之和为 \(1\) , 那么边 \((u, v)\) 在 \(G\) 中, 否则这条边不在 \(G\) 中. 现在给定 \(s\) 个结点数相同的图 \(G_{1...s}\) , 设 \(S = {G_1, G_2, \cdots , G_s}\) , 请问 \(S\) 有多少个子集的异或为一个连通图? \(n…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4671 题解 半年前刚学计数的时候对这道题怀着深深的景仰,现在终于可以来做这道题了. 类似于一般的容斥和反演题,我们发现整个图是联通的图非常不好求.于是我们转化为整个图钦定了有 \(i\) 个块必须不连通,其余任意的方案数. 然后考虑这个怎么求,我们可以暴力枚举一下把这些数分成很多组,显然方案数就时 \(B_n\)(贝尔数,就是 \(\sum\limits_{i=0}^n \begin{Bma…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4671 考虑计算不是连通图的方案,乘上容斥系数来进行容斥. 可以枚举子集划分(复杂度是O(Bell)).就是 dfs ,记录已经有了几个集合,枚举当前元素放在哪个集合里(给它标一个 id )或者当前元素自己开一个集合. 然后就有了限制:不同点集之间不能有边.本来想限制同一点集必须是连通的,但不好限制,所以就不限制了,把这部分的影响算在容斥系数里. 如果限制不同点集之间不能有边,可以考虑高斯消…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4671 首先,考虑容斥,就是设 \( t[i] \) 表示至少有 \( i \) 个连通块的方案数: 我们希望得到恰好有一个连通块的方案数,但这里不能直接 \( + t[1] - t[2] + t[3] - t[4] ... \),因为每个“恰好 \( i \) 个连通块”的情况并不是在各种 \( t[j] ( j<=i ) \) 中只被算了一次,而是因为标号,被算了 \( S(i,j) \…
bzoj4671 异或图(斯特林反演,线性基) 祭奠天国的bzoj. 题解时间 首先考虑类似于容斥的东西. 设 $ f_{ i } $ 为至少有 $ i $ 个连通块的方案数, $ g_{ i } $ 为正好有 $ i $ 个连通块的方案数. 那么有 \[f_{ m } = \sum\limits_{ i = m }^{n} \begin{Bmatrix} i \\ m \end{Bmatrix} g_{ i } \] 斯特林反演就有 \[g_{ 1 } = \sum\limits_{ i =…
bzoj4671: 异或图 Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 (u, v) 在 G 中, 否则这条边不在 G 中. 现在给定 s 个结点数相同的图 G1...s, 设 S = {G1, G2, . . . , Gs}, 请问 S 有多少个子集的异 或为一个连通图? Input 第一行为一个整数s, 表图的个数. 接下来每一个二进制串, 第 i 行的二进制串为 g…
[BZOJ4671]异或图 - xjr01 - 博客园 考虑先算一些限制少的情况 gi表示把n个点的图,划分成i个连通块的方案数 连通块之间不连通很好处理(怎么处理看下边),但是内部必须连通,就很难办了 所以再降低条件,fi表示,把n个点的图,划分成i个"连通块",保证连通块之间不会有边相连,但是内部可以不连通的方案数 fi计算方法如下: 用Bell(n)的复杂度枚举集合划分,然后相邻集合之间不能连边, 然后考虑凑出符合这个集合划分的图有多少个,异或高斯消元,xi表示第i个图选择与否,…
题目描述 定义两个结点数相同的图 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个…
传送门 我咋感觉我学啥都是白学-- 首先可以参考一下这一题,从中我们可以知道只要知道两点间任意一条路径以及整个图里所有环的线性基,就可以得知这两个点之间的所有路径的异或和 然而我好像并不会求线性基能张成的元素--话说原来这个在线性基里爆搜就可以了么-- 于是我们可以随便选一个点为根,\(dfs\)一遍跑出个生成树,\(dis[u]\)表示点\(u\)到根节点的路径上的异或和,那么\(dis[u]\bigoplus dis[v]\)就是\(u,v\)之间的一条路径的权值,设\(x\)为一个线性基能…
题目链接 题意 给定\(n\)个数,将其所有的子集(\(2^n\)个)的异或和按升序排列.给出一个询问\(q\),问\(q\)在该序列中第一次出现位置的下标(下标从\(1\)开始). 题解 结论 记其线性基为\(\mathfrak B\),则每个异或和出现的次数为\(2^{n-|\mathfrak B|}\). 证明 从高斯消元的角度看,将\(n\)个数看作\(n\)个行向量,经行等价变换后得到一个行简化梯形矩阵,非零行的行数为\(|\mathfrak B|\),而下面的\(n-|\mathfr…
[题解]魔改版线性基 魔改版线性基解决此类问题. 联系线性空间的性质,我们直接可以构造出这样的基: \[ 100000 \\ 010000 \\ 000010 \\ 000001 \] 使得每个基的最高位是唯一的,我们的目的是要能够保证从上往下一直异或一直变大,所以不能使基出现这样的情况: \[ 100001 \\ 000001 \] 一个不能从上往下一直异或一直变大的例子. 考虑如何构造\(kth\) 大(小),考虑这样的性质,我们记\(a_i\)表示从下往上第\(i\)个基,显然从\(0\)…
思路: 这题思路好鬼畜啊-- 绝对是神思路 //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; const int N=100050,M=1000050; int n,m,first[N],next[M],v[M],tot=1,vis[N],a[M],b[N],xx,yy,stk[19],ans; void add(int x,int y){v[tot]=y,next[tot]=fir…
题面 Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 (u, v) 在 G 中, 否则这条边不在 G 中. 现在给定 s 个结点数相同的图 G1...s, 设 S = {G1, G2, . . . , Gs}, 请问 S 有多少个子集的异 或为一个连通图? Input 第一行为一个整数s, 表图的个数. 接下来每一个二进制串, 第 i 行的二进制串为 gi, 其中 gi 是原…
题目描述 给由 $n​$ 个数组成的一个可重集 $S​$ ,每次给定一个数 $k​$ ,求一个集合 $T⊆S​$ ,使得集合 $T​$ 在 $S​$ 的所有非空子集的不同的异或和中,其异或和 $T_1\ \text{xor}\ T_2\ \text{xor}\ …\ \text{xor}\ T_{|T|}​$ 是第 $k​$ 小的.求这个第 $k$ 小的异或和. 题解 线性基+特判 板子题没什么好说的,直接求出严格线性基,由于每个最高位只有一个因此按位判断即可. 关键在于一个特判:原来的可重集可…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 XOR Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4731    Accepted Submission(s): 1658 Problem Description XOR is a kind of bit operator, we…
题目链接 题意 给定\(n\)个数,取其中的一个子集,使得异或和最大,求该最大的异或和. 思路 先求得线性基. 则求原\(n\)个数的所有子集的最大异或和便可转化成求其线性基的子集的最大异或和. 因为线性基可排列成一个行简化梯形矩阵,每一行的最左边的\(1\)的位置递增,且该\(1\)所在列的其余元素全为\(0\). 故显见最大值即为将全部异或起来. Code #include <stdio.h> #include <string.h> #define maxl 60 using…
洛谷 Codeforces 分治的题目,或者说分治的思想,是非常灵活多变的. 所以对我这种智商低的选手特别不友好 脑子不好使怎么办?多做题吧-- 前置知识 线性基是你必须会的,不然这题不可做. 推荐再去看看洛谷P4151. 思路 看到异或最短路,显然线性基. 做题多一些的同学想必已经想到了"洛谷P4151 [WC2011]最大XOR和路径"了. 先考虑没有加边删边的做法: 做出原图的任意一棵生成树: 把每个非树边和树边形成的环丢进线性基里: 询问时把两点在树上的路径异或和丢进线性基里求…
[BZOJ2115]Xor(线性基) 题面 BZOJ Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图中可能有重边或自环. Output 仅包含一个整数,表示最大的XOR和(十进制结果),注意输出后加换行回车. Sample Input 5 7 1 2 2 1 3 2 2 4 1 2 5 1 4 5 3 5 3 4 4 3 2…
[BZOJ3563/BZOJ3569]DZY Loves Chinese I/II(随机化,线性基) 题面 搞笑版本 正经版本 题面请自行观赏 注意细节. 题解 搞笑版本真的是用来搞笑的 所以我们来讲正经代码 首先随便找一棵生成树出来 于是,我们就得到了一棵树+若干边的东西 如果删掉了若干边使得图不再联通, 证明这条边,以及覆盖了这条边的那些边都被断开了. 于是,我们给所有不再生成树上的边全部随机一个权值 然后树上的边的权值为覆盖了它的所有边的权值异或和 考虑如何查询,如果这一系列边都被断开,导…
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最高位的1在第x位. [就是原集合的任意子集的异或和 与 线性基的任意子集的异或和 完全相等] 2.线性基的构造法: 对每个数p从高位到低位扫,扫到第x位为1时,若ax不存在,则ax=p并结束此数的扫描,否则令p=p xor ax. [高斯消元] 异或版高斯消元后的线性基会变成类似上面的样子(线性基是…
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图中可能有重边或自环. 输出 仅包含一个整数,表示最大的XOR和(十进制结果),注意输出后加换行回车. 样例输入 5 7 1 2 2 1 3 2 2 4 1 2 5 1 4 5 3 5 3 4 4 3 2 样例输出 6 题解 DFS树+高斯消元求线性基 首先肯定能够想到,1->n的路径一定是一条链+选…
[题目分析] 显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可. 但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有的简单环都可以经过各种各样的异或得到. 然后线性基,在从高位向低位贪心即可,至于证明,需要拟阵的相关知识. [代码] #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath>…
学了新的忘了旧的,还活着干什么 题意:一些盒子,每步可选择打开盒子和取出已打开盒子的任意多石子,问先手是否必胜 搬运po姐的题解: 先手必胜的状态为:给出的数字集合存在一个异或和为零的非空子集,则先手必胜 证明: 首先我们有状态A:当前的所有打开的箱子中的石子数异或和为零,且所有关闭的箱子中的石子数的集合中不存在一个异或和为零的非空子集 易证A状态时先手必败 先手有两种操作: 1.从一个打开的箱子中拿走一些石子 那么根据Nim的结论 后手可以同样拿走一些石子使状态恢复为A状态 2.打开一些箱子…
链接: http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意: 给出n个数,从中任意取几个数字异或,求第k小的异或和 思路: 线性基求第k小异或和,因为题目中可以出现异或和为0的情况,但线性基里是不会出现异或和为0的情况,所以我们需要多处理下,将数字全插入到线性基中,如果无法插入也就代表会出现异或和为0的情况,那么求第k小就应该变成求线性基中第k-1小. 实现代码: #include<bits/stdc++.h> using namespace s…
[CF938G]Shortest Path Queries(线段树分治,并查集,线性基) 题面 CF 洛谷 题解 吼题啊. 对于每个边,我们用一个\(map\)维护它出现的时间, 发现询问单点,边的出现时间是区间,所以线段树分治. 既然路径最小值就是异或最小值,并且可以不是简单路径, 不难让人想到\(WC2011\)那道最大\(Xor\)路径和. 用一样的套路,我们动态维护一棵生成树,碰到一个非树边, 就把这个环的异或和丢到线性基里面去,这样子直接查就好了. 动态维护生成树直接用并查集就好了,没…
题意:求第\(k\)小的异或和 要点: 1.线性基能表示原数组的任意异或和,但不包括0,需特判(flag) 2.线性基中的异或组合只有\(2^{|B|}-1\)个,如果可以异或为0,则组合数为\(2^{|B|}\)个 3.线性基去除上三角矩阵中的0后是必然递增的,既\(2^{|B|}-1\)严格递增,因此按\(k\)的二进制取值是必然的 4.不要化为完全的对角形式,否则无法辨别集合大小的正确性 #include<iostream> #include<algorithm> #incl…
异或空间下的线性基模版 异或空间下求线性基,本质还是高斯消元,参见 http://www.cnblogs.com/Mr-WolframsMgcBox/p/8562924.html 求最大值是一个贪心的过程,从高位到低位,如果异或起来可以更大,就异或 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #defi…
思路: 最大: 所有线性基异或一下 次大: 最大的异或一下最小的线性基 搞定~ //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int n,flag=1,ans,a[100050]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); f…
https://www.cnblogs.com/31415926535x/p/11260897.html 概述 最近的几场多校出现了好几次线性基的题目,,会想起之前在尝试西安区域赛的一道区间异或和最大的问题时,当时因为异或的性质知道这道题肯定用线段树来维护区间的最值,但是不知道用什么来处理异或和最大,,即使后来知道了可以用线性基来处理,看了一些博客也因为感觉太难收藏到书签就再也没看过,,,于是这几天,花了差不多4.5天的时间,大概看懂了这部分的内容,感觉这只是一种专门处理异或问题的一个工具,光这…
可爱的菜菜子 题目链接:https://cometoj.com/contest/38/problem/D?problem_id=1543 数据范围:略. 题解: 首先,如果第一个操作是单点修改,我们就只需要用线段树维护区间线性基即可. 但是,第一个操作是区间异或,这就很难受了. 区间操作可以怎么转化成单点?差分呗. 将原序列异或差分之后,确实修改变成了单点修改. 查询是否有影响?其实是没有影响的因为相当于整个一个区间的每个数异或上同一个数(前$l - 1$个数的异或和),线性基不受影响. 代码:…