群论和线性基

题单介绍

# 群论和线性基 ## 前置芝士 [置换群](https://oiwiki.org/math/permutation-group/) [Burnside引理和Polya定理](https://blog.csdn.net/liangzhaoyang1/article/details/72639208) [线性基](https://blog.csdn.net/a_forever_dream/article/details/83654397) ### 群 >对于一个集合 $S$和一种运算$\cdot$,构成的代数结构 $(S,\cdot)$ 满足封闭性,结合律,有单位元和逆元。 通俗来讲就是对于一个集合和一种运算构成的一个整体,满足: * 集合内的元素经过这个运算所得到的结果都在这个集合里(封闭性) * 类比于乘法运算的结合律,可以理解为运算满足无序性,即:$(a\cdot b)\cdot c= a\cdot(b\cdot c)$(结合律) * $\exists e\in S,\forall a\in S,a\cdot e=a$也就是说集合中存在一个数,使得所有的数经过运算都可以得到原来的数。 * $\forall a\in S,\exists b\in S,a\cdot b=e$ 那么就称 $b$ 为 $a$ 的逆元。 ### 置换和置换群 置换运算可以理解为映射,对于一个排列可以映射为另一种排列。 置换的乘法可以理解为复合函数,二次映射。 置换群就是运算为置换乘法的群。 ### Burnside引理 >每个置换的不动点个数的平均值就是不同的方案数 对于一个置换 $f$ ,若一个染色方案 $s$ 经过置换后不变,称 $s$ 为 $f$ 的不动点。将f的不动点数目记为 $C(f)$,则可以证明等价类数目为所有 $C(f)$ 的平均值。 ### Pólya 定理 假设一个置换有 $k$ 个循环,易知每个循环对应的所有位置颜色需一致,而任意两个循环之间选什么颜色互不影响。 因此,如果有 $m$ 种可选颜色,则该置换对应的不动点个数为 $m^k$。用其替换 burnside 引理中的 $C(f)$,即 $C(f)=m^k$ 令 $|F|$ 表示置换的数目,$k_i$ 表示第 $i$ 个置换包含的循环个数。 那么答案就是 $\dfrac{\sum\limits_{i=1}^{|F|}m^{k_i}}{|F|}$ ## 例题略解 ### [P4980 【模板】Pólya 定理](https://www.luogu.com.cn/problem/P4980) 真就是个板子题,由 **Pólya 定理** 定理可得: 方案数(也就是不动点数)为 $\dfrac{\sum\limits_{i=1}^{n}n^{\gcd(i,n)}}{n}$ 因为一共有 $n$ 种颜色,有 $n$ 个置换(以环的 $n$ 个位置为起点)每个置换的循环长度为 $\gcd(i,n)$ (由同余方程可得),因此就有 $\gcd(i,n)$ 个置换。 但是枚举 $1\sim n$ 显然会超时,因此我们枚举 $\gcd$ 通过 $\varphi$ 求出来最后的答案。 [$code$](https://www.luogu.com.cn/paste/rdr3vqas) ### [P1446 [HNOI2008]Cards](https://www.luogu.com.cn/problem/P1446) 果然 数论 与 DP 搭配是最妙的了。。。。 设 DP 数组 $f_{i,j,k}$ 表示 red 的有 $i$ 个,blue 的有 $j$ 个,green 有 $k$ 个。 然后计算当前序列的所有的环的长度,因为是置换,所以整个环的颜色都是相同的,做一个类似于背包的东西就好了。 注意这里原序列的顺序也算一种情况。 [$code$](https://www.luogu.com.cn/paste/htnw2wuv) ### [P4128 [SHOI2006] 有色图](https://www.luogu.com.cn/problem/P4128) 又是一道不同寻常的题,DFS+数论公式推导。 考虑将置换 $(a_1,a_2,a_3...a_n)$ 拆成若干个长度不等的置换 $(b_1,b_2,b_3...b_k)$ 的乘积的形式。 那么问题就变成了求这一系列置换的不动点,也就是边的等价类。 主要分为两种情况: 1. 端点在同一个循环中,那么此时对于两条边不在同一个等价类的条件就是长度不同,对于一个长度为 $b_i$ 的循环而言,两点之间不同长度的边一共有 $\lfloor\dfrac{b_i}{2}\rfloor$ 种。 2. 端点在两个循环之间,两个循环的共同的周期就是 $\operatorname{lcm}(b_i,b_j)$ ,然后不同等价类的个数就是$\dfrac{b_i\times b_j}{\operatorname{lcm}(b_i,b_j)}=\gcd(b_i,b_j)$ 综上所述,总的等价类个数就是 $\sum\limits_{i}\left\lfloor\frac{b_i}{2}\right\rfloor+\sum\limits_{i<j}\gcd(b_i,b_j)$ 考虑对于 1 到 $n$ 的每个点,分配它在第几个循环中。 这相当于一个多重组合数 $\dfrac{n!}{\prod b_i!}$。 而对于每一个置换,分配它内部的顺序,这相当于一个**圆排列**,即 $\prod(b_i−1)!$,结合前面是 $\dfrac{n!}{\prod b_i}$。 最后我们会发现这样其实会算重,因为每个循环的前后顺序不影响,比如不能把 1,2 和 2,1(这里表示每个点在第几个循环内)当作不同的循环分配方案。 发现只有 $b_i$ 相同的会影响,假设有 $c$ 个,正好多乘了 $c!$ 种方案,除掉就好了。这相当于$ \dfrac{n!}{\prod b_i\prod c!}$。 最终的答案就是: $$\displaystyle\sum_{b}\frac{1}{\prod b_i\prod c!}m^{\left[\sum_{i}\lfloor\frac{b_i}{2}\rfloor+\sum_{i<j}\gcd(b_i,b_j)\right]}$$ [$code$](https://www.luogu.com.cn/paste/r4nyuuw3) ### [P4570 [BJWC2011]元素](https://www.luogu.com.cn/problem/P4570) 大白板。 我们一定是选择贡献较大的优先加入,为什么这样是对的呢。 假如有 $c<a+b$ 并且 c 的加入会导致 a 和b 无法加入。 但是仔细思考后我们会发现,这样的情况 a 或者 b 任意一者的加入都会导致另外两个无法加入,因此上面的贪心是对的。 [$code$](https://www.luogu.com.cn/paste/n5angpov) ### [P4869 albus就是要第一个出场](https://www.luogu.com.cn/problem/P4869) 直接求每一个数肯定不行的,因此我们考虑先求出种类数,再根据种类数求出最后的答案。 假设我们线性基里成功插入了 $k$ 个数,那么剩下的 $n-k$ 个数字自由组合异或出来的数字就一定会在线性基中找到。 假设有一种合法的数字是 $x$ 假设随机组合出的数字异或出来是 $a$ 那么相对应的使得 $a\;xor\;b=x$ 的 $b$ 有且仅有一个。 毕竟我们的 $b$ 是可以通过 $a\;xor\;x$ 求出来的。 对于之前没有插入的数字的贡献也通过这种方式算进去了。 [$code$](https://www.luogu.com.cn/paste/4wj2daq5) ### [P3292 [SCOI2016]幸运数字](https://www.luogu.com.cn/problem/P3292) 本来是感觉自己的点分治学得不是特别牢固。 想搞一下别的算法,没想到把题解区某篇倍增的算法魔改成树链剖分之后就到 rk2 了,然后卡了一下常就 rk1 了(逃 ![](https://cdn.luogu.com.cn/upload/image_hosting/h7r8lsdz.png) 大概是线性基上树的一个操作,从根节点开始建,然后对于之前已经有这一位的情况我们更新更大深度的。 每一次询问的话直接把一个节点的暴力插入到另一个节点中,然后直接求最大值就好了。 [$code$](https://www.luogu.com.cn/paste/wi2czic8)

题目列表

  • 【模板】Polya 定理
  • [HNOI2008] Cards
  • [SHOI2006] 有色图
  • [BJWC2011] 元素
  • albus就是要第一个出场
  • [SCOI2016] 幸运数字