群论基础 - 学习笔记
群论基础 - 学习笔记
P.S. 以下短时间内会用到的定理与定义均使用 下划线 表示
初学群论,错漏在所难免,求大家轻喷
1. 代数系统
定义:运算为集合 \(A\) 上的映射 \(\tau :\ ^{n}A \rightarrow A\) (由 \(n\) 个数映射到 \(1\) 个数),我们也称 \(\tau\) 为集合 \(A\) 上的 \(n\) 元运算
定义:代数系统为定义了运算的集合 \(A\),记为 \(\texttt<A \texttt; \varOmega \texttt>\),其中 \(\varOmega\) 为运算集 \(\{\tau_1, \tau_2, \cdots, \tau_n\}\),要求:
- \(\tau_i\) 在 \(A\) 上处处有定义,且运算是封闭的
例:\(\texttt<\mathbb N \texttt; \{-\} \texttt>\) 不是运算系统,因为 \(4-5 = -1 \notin \mathbb N\)
2. 广群与半群
定义:广群:当 \(\varOmega = \{\tau\}\) (即只含一个运算时),\(\texttt<A \texttt; \varOmega \texttt>\) 为广群,以下也记作 \(\texttt<A \texttt; \tau \texttt>\)
定义:半群:\(\tau\) 满足结合律(即 \((a\ \tau\ b)\ \tau\ c = a\ \tau\ (b\ \tau\ c)\) )时,称为半群
例:\(\texttt< \mathbb N \texttt; + \texttt>\) 是半群,\(\texttt< \mathbb Z \texttt; - \texttt>\) 不是半群
定义:单位元相关:
- 满足 \(\forall a \in A, e_l\ \tau\ a = a\) 的 \(e_l\) 称为左单位元
- 满足 \(\forall a \in A, a\ \tau\ e_r = a\) 的 \(e_r\) 称为右单位元
- 若 \(e_l = e_r\),记为 \(e\),称为单位元
- 具有单位元(单元)的半群称为单元半群
例:\(\texttt< \mathbb N \texttt; + \texttt>\) 是单元半群,单位元为 \(0\)
定义:逆元相关:
- 满足 \(a_l^{-1}\ \tau\ a = e\) 的 \(a_l^{-1}\) 称为 \(a\) 的左逆元
- 满足 \(a\ \tau\ a_r^{-1} = e\) 的 \(a_r^{-1}\) 称为 \(a\) 的右逆元
- 若 \(a_l^{-1} = a_r^{-1}\),记为 \(a^{-1}\),称为 \(a\) 的逆元
定义:子半群:若 \(\texttt<A \texttt; \tau \texttt>\) 与 \(\texttt<B \texttt; \tau \texttt>\) 均为半群且 \(B \subseteq A\),称 \(\texttt<B \texttt; \tau \texttt>\) 为 \(\texttt<A \texttt; \tau \texttt>\) 的子半群
P.S. 若 \(\texttt<B \texttt; \tau \texttt>\) 不构成半群,但 \(\forall a \in A\),\(a\) 可由 \(B\) 中元素经过运算 \(\tau\) 得到,则称 \(B\) 为半群 \(A\) 的生成子
3.同态与同构
同态和同构体现复杂代数系统到简单代数系统的转移
定义:同态与同构相关:
- 设 \(\texttt<A \texttt; \circ \texttt>\) 与 \(\texttt<B \texttt; * \texttt>\) 均为广群,对于 \(a, b \in A\),满足 \(f :\ A \rightarrow B\) 使得 \(f(a \circ b) = f(a) * f(b)\) 的映射 \(f\) 称为同态映射,简称同态
- 若同态 \(f\) 是双射,则称为同构映射,简称同构
- 若半群 \(A, B\) 间存在同构,则称 \(A, B\) 同构,记作 \(A \cong B\)
例:对于 \(\texttt<\mathbb{R^+} \texttt; \times \texttt>\) 与 \(\texttt<\mathbb R \texttt; + \texttt>\),一个同态 / 同构为 \(f :\ x \mapsto \log x\);显然 \(\log(a \times b) = \log a + \log b\)
4. 群
定义:群:设 \(\texttt<G \texttt; \tau \texttt; e \texttt>\) 为单元半群,若对于 \(\forall a \in G,\ \exists a^{-1} \in G\),使得 \(a\ \tau \ a^{-1} = a^{-1}\ \tau \ a = e\) (存在逆元),则称 \(\texttt<G \texttt; \tau \texttt; e \texttt>\) 为群
换句话说,我们要求群满足如下性质:
- 运算 \(\tau\) 满足结合律,且在 \(G\) 上是封闭的
- 存在单位元
- 任何元素都有逆元
其实,上述后两条性质可以简化为:
- 存在左单位元
- 任何元素都有左逆元
这里给出另一种描述,对于集合 \(G\) 与运算 \(\tau\),有:
- \(\forall a, b, c \in G,\ (a\ \tau \ b)\ \tau \ c = a\ \tau \ (b\ \tau \ c)\) (结合律)
- \(\exists e_l \in G,\ s.t.\ \forall a \in G,\ e_l\ \tau \ a = a\) (左单位元)
- \(\forall a \in G,\ \exists a_l^{-1} \in G,\ s.t. \ a_l^{-1}\ \tau \ a = e\) (左逆元)
下面证明这与先前给出的定义是等价的
首先证 \(\forall a \in G,\ a_r^{-1} = a_l^{-1}\) (右逆元):
\(a\ \tau \ a_l^{-1} = e_l\ \tau \ a\ \tau \ a_l^{-1} = ((a_l^{-1})^{-1}\ \tau \ a_l^{-1})\ \tau \ a\ \tau \ a_l^{-1}\)
\(= (a_l^{-1})^{-1}\ \tau \ (a_l^{-1}\ \tau \ a)\ \tau \ a_l^{-1} = (a_l^{-1})^{-1}\ \tau \ (e_l\ \tau \ a_l^{-1}) = (a_l^{-1})^{-1}\ \tau \ a_l^{-1} = e_l\)
再证 \(e_r = e_l\) (右单位元):
\(a\ \tau \ e_l = a\ \tau \ (a^{-1}\ \tau \ a) = (a\ \tau \ a^{-1})\ \tau \ a = e_l\ \tau \ a = a\)
定理:单位元唯一,逆元唯一:
- 设左单位元为 \(e_l\),右单位元为 \(e_r\),则必有 \(e_l\ \tau \ e_r = e_l = e_r\)
- 设 \(a\) 的左逆元为 \(a_l^{-1}\),右逆元为 \(a_r^{-1}\),则必有 \(a_l^{-1}\ \tau \ a\ \tau \ a_r^{-1} = a_l^{-1} = a_r^{-1}\)
定义:交换群:运算满足交换律的群,称为交换群(或 Abel 群)
定理:群判定相关
- 若半群 \(\texttt<G \texttt; \circ \texttt>\) 有左单位元,且任意元素都有左逆元,则 \(\texttt<G \texttt; \circ \texttt>\) 是群
- 若对于半群 \(\texttt<G \texttt; \circ \texttt>\),满足 \(\forall a, b \in G,\ \begin{cases} a\ \circ \ x = b \\ y\ \circ \ a = b \end{cases}\) 有解,则称其是可解的;可解半群必是群
第一条上面证过了,下面证明第二条
先证存在右单位元;不妨取 \(a\ \circ \ x = a\) 这一方程,设其解为 \(e_r\)
又因为 \(\forall k,\ y\ \circ \ a = k\) 有解,则:
\(k\ \circ \ e_r = (y\ \circ \ a)\ \circ \ e_r = y\ \circ \ (a\ \circ \ e_r) = y\ \circ \ a = k\)
证毕,类似可证存在左单位元;逆元显然存在
4.1 群的重要性质及相关定义
对于群 \(\texttt<G \texttt; \circ \texttt>\):
- \(\forall a, b \in G,\ \exists x \in G,\ s.t.\ a\ \circ \ x = b\);同时,\(\exists y \in G,\ s.t.\ y\ \circ \ a = b\);相当于可解性反过来了
- 构造 \(x = a^{-1}\ \circ \ b,\ y = b\ \circ \ a^{-1}\) 即得证
- 左消去律与右消去律:\(a\ \circ \ b = a\ \circ \ c \iff b = c\);类似的,\(b\ \circ \ a = c\ \circ \ a \iff b = c\)
- 左 / 右同乘逆元即得证
定义:群元素的幂:\(a^k = \begin{cases} a^0 = e,\ k = 0 \\ a^n = a^{n-1}\ \circ \ a,\ n \in \mathbb{N^{+}} \\ a^{-n} = (a^{-1})^n,\ n \in \mathbb{N^{+}} \end{cases}\)
定义:群元素的阶:使 \(a^r = e\) 的最小正整数 \(r\) 称为 \(a\) 的阶;若 \(r\) 不存在,则称 \(a\) 有无限阶
注意区分,我们称有限群 \(G\) 的阶为 \(|G|\),即其元素个数
4.2 特殊的群
定义:循环群:设 \(\texttt<G \texttt; \tau \texttt>\) 为群,若 \(\exists a \in G,\ s.t. \ \forall b \in G,\ b\) 可表示为 \(a^k\ (k \in \mathbb Z)\),则称群 \(G\) 为循环群,称 \(a\) 为 \(G\) 的生成元,记作 \(G = [a]\)
定义:变换群:令 \(B = \{f\ |\ f:A \rightarrow A,\ f\ 是双射\}\),定义 \(\circ\) 为复合运算,则 \(\texttt<B \texttt; \circ \texttt; I_B \texttt>\) ( \(I_B\) 为恒等映射) 为 \(A\) 上的变换群,其一切子群也为变换群
定义:对称群:\(\texttt<B \texttt; \circ \texttt; I_B \texttt>\) 也称为对称群,\(|A| = n\) 时记为 \(S_n\)
定理:Cayley 定理:任意的群 \(\texttt<G \texttt; \tau \texttt>\) 都与某一变换群同构
下面给出 Cayley 定理的证明
构造映射 \(f_a : G \rightarrow G,\ f_a(x) = x\ \tau \ a\)
由可解性,\(\forall b \in G,\ x\ \tau \ a = b\) 有解;这说明 \(f_a\) 是满射
由右消去律,\(f_a(x) \ne f_a(y)\);这说明 \(f_a\) 是单射
综上,\(f_a\) 是双射
令集合 \(G' = \{f_a\ |\ a \in G\}\);显然 \(\texttt<G' \texttt; \circ \texttt>\) 是广群(其中 \(\circ\) 为复合运算)
构造映射 \(\varphi\ : \ G \rightarrow G',\ \varphi (a) = f_a\);易证 \(\varphi\) 是双射
因此 \(\texttt<G \texttt; \tau \texttt>\) 与 \(\texttt<G' \texttt; \circ \texttt>\) 同构
可理解为右乘 \((a\ \circ \ b)\) 与先置换到右乘 \(a\) 再置换到右乘 \(b\) 等价
定义:置换群:集合 \(A\) 为有限集时的变换群称为置换群
我们系统地给出置换的相关定义:
定义:置换:令 \(A = \{a_1, a_2, \cdots, a_n\}\),映射 \(\sigma : A \rightarrow A\),且 \(\sigma\) 为双射,称 \(\sigma\) 为 \(A\) 的一个置换,记作 \(\begin{pmatrix} a_1 & a_2 & \cdots & a_n \\ \sigma (a_1) & \sigma (a_2) & \cdots & \sigma (a_n) \end{pmatrix}\)
- 置换的复合:对元素 \(i \in \sigma_0\),\(\sigma_0\ \circ \ \sigma_1\) 后 \(a_i \rightarrow \sigma_1 ( \sigma_0 (a_i))\)
例:\(\begin{pmatrix} 1 & 2 & 3 \\ 3 & 2 & 1 \end{pmatrix}\ \circ \ \begin{pmatrix} 1 & 2 & 3 \\ 2 & 1 & 3 \end{pmatrix} = \begin{pmatrix} 1 & 2 & 3 \\ 3 & 1 & 2 \end{pmatrix}\)
- 单位置换:\(\begin{pmatrix} a_1 & a_2 & \cdots & a_n \\ a_1 & a_2 & \cdots & a_n \end{pmatrix}\)
- 逆置换:\(\sigma\) 的逆置换为 \(\begin{pmatrix} \sigma (a_1) & \sigma (a_2) & \cdots & \sigma (a_n) \\ a_1 & a_2 & \cdots & a_n \end{pmatrix}\)
P.S. 有时候也用轮换表示置换,将置换连边,每个环拿出来,扔掉自环即得到轮换 (如果全是自环则保留第一个)
例:\(\begin{pmatrix} 1 & 2 & 3 \\ 2 & 1 & 3 \end{pmatrix}\) 用轮换可表示为 \((1, 2)\),代表 \(1 \rightarrow 2 \rightarrow 1, 3 \rightarrow 3\)
回头看上面提到的 Cayley 定理,我们有一个显然推论:
- 任一有限群必和一置换群同构
其实这里蕴含着一个做题中常用的思想:我们不常用群刻画具体的元素,而常去刻画元素间的置换关系
这是后话了,后面讲群作用时会再提到
4.3 子群与陪集
定义:子群:设 \(\texttt<G \texttt; \tau \texttt>\) 为群,若 \(H \subseteq G\) 且 \(H \ne \emptyset\),且 \(\texttt<H \texttt; \tau \texttt>\) 是群,则称其为 \(\texttt<G \texttt; \tau \texttt>\) 的子群
定义:陪集:设 \(\texttt<G \texttt; \tau \texttt>\) 为群,\(\texttt<H \texttt; \tau \texttt>\) 为其子群,则对于 \(g \in G\),得集合 \(H\ \tau\ g = \{h\ \tau\ g\ |\ \forall h \in H\}\),称其为 \(H\) 的右陪集;类似可定义左陪集
例:取 \(S_3 = \{(1), (1, 2), (1, 3), (2, 3), (1, 2, 3), (1, 3, 2)\}\) 且 \(H = \{(1), (1, 2)\}\) 且 \(g = (1, 3)\) (此处是轮换),\(H\) 的右陪集 \(H\ \circ \ g\) 即为 \(\{(1, 3), (1, 2, 3)\}\)
定理:设群 \(\texttt<G \texttt; \tau \texttt>\),\(H\) 为 \(G\) 的任意子群,\(H\ \circ \ g_1\) 与 \(H\ \circ \ g_2\) 是 \(H\) 的右陪集,则 \(H\ \circ \ g_1\) 与 \(H\ \circ \ g_2\) 要么相等,要么不交
下面给出该定理的证明
考虑 \(g_1\ \circ \ g_2^{-1}\) 是否在 \(H\) 中
-
若 \(g_1\ \circ \ g_2^{-1} \in H\),则易知 \(H\ \circ \ g_1 = H\ \circ \ g_2\)
-
若 \(g_1\ \circ \ g_2^{-1} \notin H\),显然 \(g_1\) 就不在 \(H\ \circ \ g_2\) 中,进而 \(H\ \circ \ g_1 \ne H\ \circ \ g_2\)
反证,若 \((H\ \circ \ g_1)\ \bigcap\ (H\ \circ \ g_2) \ne \emptyset\),取 \(a \in (H\ \circ \ g_1)\ \bigcap\ (H\ \circ \ g_2)\)
那么,必然 \(\exists h_1, h_2,\ s.t.\ h_1\ \circ \ g_1 = a,\ h_2\ \circ \ g_2 = a\)
进而 \(g_1 = (h_1^{-1}\ \circ \ h_1)\ \circ \ g_1 = h_1^{-1}\ \circ \ a = h_1^{-1}\ \circ \ h_2\ \circ \ g_2\)
又因为 \(h_1^{-1}\ \circ \ h_2 \in H\),则 \(g_1 \in H\ \circ \ g_2\),矛盾!证毕
定义:指数:我们将 \(H\) 的不同左(或右)陪集个数称为群 \(H\) 在 \(G\) 中的指数
定理:设 \(H\) 为有限子群,对 \(g \in G\),有 \(|g\ \circ \ H| = |H\ \circ \ g| = |H|\)
由左消去律或右消去律,必然一一对应,易证
定理:Lagrange 定理:必然 \(\exists k \in \mathbb{N^{+}},\ s.t.\ |G|=k|H|\)
简单证明一下
\(H\) 所有陪集的并必然构成全集,取 \(H\) 中单位元即证;又因为陪集间不交,它们必然构成 \(G\) 的一组划分
由上面的定理,所有陪集大小相等且均为 \(|H|\),那么 \(|G|\) 必然是 \(|H|\) 的倍数,证毕
5. 群作用
群常常被看作变换的集合
定义:群作用:对群 \(G\) 与集合 \(A\),若 \(G\) 到 \(A\) 的对称群 \(S_A\) 存在群同态 \(\varphi\),且该同态在 \(S_A\) 中为置换的复合,则称 \(G\) 对 \(A\) 有作用 \(\varphi\)
P.S. 对于 \(g \in G, a \in A\),以下简记 \(\varphi (g)(a)\) 为 \(ga\) (注意与乘法区分)
例:考虑 \(n\) 元环染色,\(G\) 中元素即为 \(\{旋转 1 次,旋转 2 次,\cdots, 旋转 n 次\}\),形如对环上元素的置换
以下可以类比陪集理解
定义:轨道:对于 \(a \in A\),定义 \(a\) 在 \(G\) 作用下的轨道为集合 \(O(x) = \{ga\ |\ g \in G\}\)
P.S. 可以理解为元素都能换到哪里去
定理:所有轨道的并为全集
取 \(G\) 中单位元 \(e\) 即得证
定理:所有轨道要么相同,要么无交
下面给出该定理的证明 (与陪集部分证明思路极其类似)
反证,设 \(O(x)\ \bigcap\ O(y) \ne \emptyset\),取 \(a \in O(x)\ \bigcap\ O(y)\)
那么,必然 \(\exists g_1, g_2,\ s.t.\ g_1x = g_2y = a\)
因此,有 \(x = (g_1^{-1}\ \circ \ g_2)\ y\);那么 \(x \in O(y)\)
因此,有 \(\forall g,\ gx \in O(y)\),换句话说,\(O(x) \subseteq O(y)\)
交换 \(x, y\),同理可得 \(O(y) \subseteq O(x)\);综上,\(O(x) = O(y)\),证毕
定义:稳定子:对于 \(a \in A\),定义 \(a\) 在 \(G\) 作用下的稳定子为子群 \(Stab(a) = \{g\ |\ g \in G, ga = a\}\)
为什么是子群而不是集合?除了映射 \(g\) 中使 \(x\) 不变的那一项,其他项都可以自由选,原来是群现在还是群;关于 \(x\) 的这一项始终是 \(x\),也满足封闭性,因此是群
P.S. 可以理解为使元素操作后仍在原地的置换群
定理:设 \(G'\) 为 \(Stab(x)\) 关于 \(G\) 的全体左陪集组成的集合,则映射 \(\varphi : O(x) \rightarrow G',\ gx \mapsto gStab(x)\) 为双射
下面给出这一定理的证明
由于 \(ax = bx \iff (b^{-1}\ \circ \ a)x = x \iff (b^{-1}\ \circ \ a) \in Stab(x) \iff aStab(x) = bStab(x)\),为单射
由于 \(g\) 取遍 \(G\),所有左陪集都会被取到,为满射
综上,为双射,证毕
- 推论:\(|O(x)| = |G'| = |Stab(x) 的指数|\)
- 推论:轨道-稳定子定理:\(|G| = |O(x)| \times |Stab(x)|\) (考虑 lagrange 定理)
在这里,我们再给出轨道-稳定子定理的另一种证明方式
考虑对 \(l \in O(x)\),从 \(x \rightarrow l\) 能由多少种置换完成;这个数量我们记为 \(siz_1\),同时,我们将 \(|Stab(x)|\) 记为 \(siz_2\)
- \(Stab(x)\) 中任一置换复合上一个使 \(x \rightarrow l\) 的置换,都能得一个使 \(x \rightarrow l\) 的置换,因此 \(siz_1 \ge siz_2\)
- 使 \(x \rightarrow l\) 的任一置换复合上一个使 \(x \rightarrow l\) 的置换的逆置换,都能得一个使 \(x \rightarrow x\) 的置换,因此 \(siz_1 \le siz_2\)
综上,我们有 \(siz_1 = siz_2\)
由定义,\(O(x)\) 涵盖 \(G\) 中所有置换作用在 \(x\) 上的结果,我们可以用 "每个 \(x \rightarrow l\) 的出现次数之和" 表示 \(|G|\);具体的:
\(\sum_{l \in O(x)} (x \rightarrow l 的次数) = \sum_{l \in O(x)} |Stab(x)| = |O(x)| \times |Stab(x)| = |G|\);证毕
定理:Burnside 引理:对于 \(g \in G\),定义 \(g\) 中的不动元素为所有使得 \(gx = x\) 的 \(x\);记 \(g\) 的所有不动元素构成的集合为 \(F(g)\),称为 \(g\) 的不动元素集;设 \(n\) 为本质不同轨道数,则有 \(\displaystyle n = \frac{\sum_{g \in G} |F(g)|}{|G|}\)
一句话概括:本质不同轨道数等于平均不动点个数
下面给出 Burnside 引理的证明
由定义:
\(\displaystyle \sum_{g \in G} |F(g)| = \sum_{g \in G} \sum_{x \in S} [gx == x]\)
交换求和顺序:
\(\displaystyle \sum_{g \in G} \sum_{x \in S} [gx == x] = \sum_{x \in S} \sum_{g \in G} [gx == x] = \sum_{x \in S} |Stab(x)| = \sum_{x \in S} \frac{|G|}{|O(x)|}\)
考虑每个 \(\frac{|G|}{|O(x)|}\) 出现了多少次;注意到 \(x \in O(x)\) (取 \(G\) 中单位元即可),又因为所有轨道要么无交,要么相等,\(|O(x)|\) 必然恰好被其中每个元素统计一次;换句话说,\(\frac{|G|}{|O(x)|}\) 出现了 \(|O(x)|\) 次,乘起来刚好消成 \(1\)
因此原式即为:
\(\displaystyle \sum_{x \in S} \frac{|G|}{|O(x)|} = n|G|\);得证
在做题时,我们常用群刻画元素间的变换关系;此时,一个元素的轨道中的所有元素,就是和它本质相同的所有元素
那么求本质不同方案数,就是在求本质不同轨道数,于是可以套用 Burnside 引理求解
普遍难点一般在如何刻画变换关系,以及如何求不动点个数
事实上,对于染色问题,我们还有更精确的刻画不动点个数的式子,这就是 Pólya 定理
定理:Pólya 定理:设可用颜色数量为 \(m\),\(c(g)\) 表示置换 \(g\) 能拆出的轮换个数,则有 \(\displaystyle n = \frac{\sum_{g \in G} m^{c(g)}}{|G|}\)
如何理解?对于 \(g\) 的不动点,\(g\) 中拆出的每个轮换都必然染相同的颜色,有 \(m\) 种选择;那么总共就有 \(m^{c(g)}\) 种选择
6. 例题
P4980 【模板】Pólya 定理
题意:\(n\) 个点,\(n\) 条边的环,有 \(n\) 种颜色,给每个顶点染色,求有多少种本质不同的染色方案,对 \(10^9+7\) 取模
称两个方案本质相同,当且仅当其中一个能通过旋转变成与另一个完全相同的形式
多测,\(n \le 10^9\),\(t \le 10^3\)
显然,本题中的置换群应刻画旋转操作,形如 \(\{旋转1次, 旋转2次, \cdots, 旋转n次\}\) (旋转 \(i\) 次指每个点顺时针移动 \(i\) 格)
接下来考虑如何求旋转 \(i\) 次时的不动点数量;由 Pólya 定理,即求将每个点旋转 \(i\) 次后,将原位置与新位置连边,能形成多少个小环
考虑分类讨论:
- \(i\) 与 \(n\) 互质,那么 \(pi \equiv qi\ (\bmod\ n) \iff p \equiv q\ (\bmod\ n)\),\(n\) 次一循环,能覆盖到环上所有点;那么所有点都在一个环内,方案数为 \(n^1\)
- \(i\) 与 \(n\) 不互质,不妨设 \(i = \frac{n}{k}\),则对于位置 \(j\),其所在的环经过 \(j, j+i, j+2i, \cdots, j+(k-1)i\ (\bmod\ n)\),共有 \(k\) 个元素;注意到这与 \(j\) 的位置无关,因此每个小环都有 \(k\) 个元素,总共有 \(\frac{n}{k} = i\) 个小环,方案数为 \(n^i\)
综上,旋转 \(i\) 次时,不动点数量为 \(\gcd(i,n)\)
因此整个式子即为 \(\displaystyle \frac{1}{n} (\sum_{i=1}^{n} n^{\gcd(i, n)})\)
枚举下 gcd,有:
枚举 \(n\) 的因数,暴力算 \(\varphi\) 即可,时间复杂度大概 \(O(tn^{\frac{3}{4}})\),很松
P1446 [HNOI2008] Cards
题意:\(n\) 张牌,用红、黄、蓝三种颜色给其染色,染出 \(S_r\) 张红色、\(S_b\) 张蓝色、\(S_g\) 张绿色
给定 \(m\) 种洗牌法,第 \(i\) 种洗牌法将第 \(1, 2, \cdots, n\) 张牌洗到第 \(x_{i, 1}, x_{i, 2}, \cdots, x_ {i, n}\) 张;保证:
- \(x_{i, 1}, x_{i, 2}, \cdots, x_{i, n}\) 为 \(1, 2, \cdots, n\) 的排列
- 任意多次洗牌可用 \(m\) 种洗牌法中的一种代替
- 对每种洗牌法,存在一种洗牌法使得能回到原状态
求出本质不同染色方案数,答案对给定的质数 \(P\) 取模
称两种方案本质相同,当且仅当其中一种能通过任意多次洗牌洗成另一种
\(1 \le \max(S_r, S_b, S_g) \le 20\),\(m \le 60\),\(m+1 < p < 100\)
显然,本题中的置换群应刻画"洗牌法";对于所有洗牌法,题目保证如下性质:
- 封闭性
- 每种洗牌法都存在逆元
我们肯定希望所有洗牌法构成一个群;那么它离群还差什么?
易得少了单位元(存在恒等置换)这一要求;因此如果题目中没给恒等置换,我们就自己补一个上去,这样能够保证形成群
现在问题转化为如何对每种洗牌法求出不动点个数
洗牌法数量很小,可以直接暴力连边后模拟,算出有多少个小环以及每个小环的大小;每个小环必然全填一种颜色
对于最终三种颜色恰好染到 \(S_r, S_b, S_g\) 的限制,直接做背包 dp 求方案数即可
时间复杂度 \(O(mn^3)\)
P2561 [AHOI2002] 黑白瓷砖
题意:先将 \(\frac{n(n+1)}{2}\) 块正六边形瓷砖拼成三角形的形状,你可以将每块瓷砖染成白色或黑色 (正反两面必须染同色);求本质不同染色方案数
称两种方案本质相同,当且仅当其中一种方案可以通过进行任意次以下三种操作到达另一种方案:
- 顺时针旋转 120 度
- 顺时针旋转 240 度
- 整体左右翻转 180 度
\(1 \le n \le 20\)
例:\(n=3\) 时,设初始为 \(\begin{smallmatrix} 1 \\ 2 & 3 \\ 4 & 5 & 6 \end{smallmatrix}\)
- 顺时针旋转 120 度后,变为 \(\begin{smallmatrix} 4 \\ 5 & 2 \\ 6 & 3 & 1 \end{smallmatrix}\)
- 顺时针旋转 240 度后,变为 \(\begin{smallmatrix} 6 \\ 3 & 5 \\ 1 & 2 & 4 \end{smallmatrix}\)
- 整体左右翻转 180 度后,变为 \(\begin{smallmatrix} 1 \\ 3 & 2 \\ 6 & 5 & 4 \end{smallmatrix}\)
显然,本题中的置换群应刻画旋转操作;不过直接将题目中给的操作扔进去(加上单位元),能形成群么?
手玩一下,以 \(n=3\) 时为例,设初始为 \(\begin{smallmatrix} 1 \\ 2 & 3 \\ 4 & 5 & 6 \end{smallmatrix}\)
先顺时针旋转 120 度,变为 \(\begin{smallmatrix} 4 \\ 5 & 2 \\ 6 & 3 & 1 \end{smallmatrix}\)
再整体左右翻转 180 度,变为 \(\begin{smallmatrix} 4 \\ 2 & 5 \\ 1 & 3 & 6 \end{smallmatrix}\)
你发现这不太能通过一次操作从初始情况变过来;那么我们需要添加一些旋转方式,使得能够形成群
注意到三角形中元素相对位置不变,于是我们只考虑元素 \(1\) 的位置及正反;约定:
- 在左上角记为 \(\uparrow\)
- 在右下角记为 \(\searrow\)
- 在左下角记为 \(\swarrow\)
- 若为反面则在前面加一个 \(*\)
若不涉及翻转操作,所有旋转操作显然是封闭的;那么我们需要考虑的只有先旋转再翻转这种情况 (先翻转再旋转是一样的);记一开始元素 \(1\) 的位置为 \(\uparrow\):
- 旋转 120 度后翻转,得到 \(*\swarrow\)
- 旋转 240 度后翻转,得到 \(*\searrow\)
考虑有什么操作能一次使得从 \(\uparrow\) 到 \(*\swarrow\)、从 \(\uparrow\) 到 \(*\searrow\);事实上,就是按照左下角翻转与按照右下角翻转
容易证明加入这两个翻转操作后构成群
现在考虑如何求不动点个数
对于旋转,均为三个点一组(因为转三次必定转回来);注意可能在中心有一个不动点,其在一次旋转后仍然处于原来的位置 (不会有两个,因为 \(\frac{n(n+1)}{2} \bmod 3 \ne 2\) )
记 \(m = \frac{n(n+1)}{2}\),此时共有 \(\lceil \frac{m}{3} \rceil\) 组
例:\(n=4\) 时,设初始为 \(\begin{smallmatrix} 1 \\ 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 & 10 \end{smallmatrix}\)
旋转 120 度后,为 \(\begin{smallmatrix} 7 \\ 8 & 4 \\ 9 & 5 & 2 \\ 10 & 6 & 3 & 1 \end{smallmatrix}\)
那么拆出来为 \((1,10,7)\),\((2,6,8)\),\((3,9,4)\) 和 \((5)\),共有 \(\lceil \frac{10}{3} \rceil = 4\) 组;其中 \(5\) 即为不动点
对于翻转,均为两个点一组,其中中线上的 \(\lceil \frac{n}{2} \rceil\) 个元素在一次翻转后仍然处于原来的位置
此时共有 \(\frac{m-\lceil \frac{n}{2} \rceil}{2} + \lceil \frac{n}{2} \rceil\) 组
例:\(n=4\) 时,设初始为 \(\begin{smallmatrix} 1 \\ 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 & 10 \end{smallmatrix}\)
左右翻转 180 度后,为 \(\begin{smallmatrix} 1 \\ 3 & 2 \\ 6 & 5 & 4 \\ 10 & 9 & 8 & 7 \end{smallmatrix}\)
中线上的 \(1, 5\) 不动,其余两两一组;共有 \(\frac{10-2}{2}+2 = 6\) 组
综上,总不动点个数为 \(\frac{1}{6} (2^m+2 \times 2^{\lceil \frac{m}{3} \rceil}+3 \times 2^{\frac{m-\lceil \frac{n}{2} \rceil}{2} + \lceil \frac{n}{2} \rceil})\)
注意需要高精度,也可以用 python 打完表直接交 ()
UVA10601 Cubes
题意:给定 \(12\) 根等长、着色的木棒,问能构成的本质不同正方体的数量;颜色最多有 \(6\) 种
称正方体 \(A\) 和 \(B\) 本质相同,当且仅当 \(A\) 能通过若干次旋转或翻转得到 \(B\)
多测,\(1 \le T \le 60\)
容易发现关键在于刻画所有旋转及翻转操作;这道题其实有点结论题的意思,可以参见 OI-wiki 上对多面体群的解释
对于正八面体,我们有 \(24\) 种旋转及翻转方式
- 恒等变换,\(1\) 种
- 在 \(x, y, z\) 三轴上旋转 90 度或 270 度 (这里转 1 次和转 3 次有区别),\(3 \times 2 = 6\) 种
- 在 \(x, y, z\) 三轴上旋转 180 度 (这里正着转和反着转没有区别),\(3 \times 1 = 3\) 种
- 沿 \(x, y, z\) 三轴对应面的对角线翻转 (这里一面的两个对角线有区别,同轴相对的两面没有区别),\(3 \times 2 = 6\) 种
- 沿 \(x, y, z\) 三轴对应面,不同侧上下两相对顶点的连线翻转 120 度或 240 度 (这里转 1 次和转 2 次有区别,同轴不同侧也有区别),\(4 \times 2 = 8\) 种
第 4 种方式的解释图:

第 5 种方式的解释图:

这 \(5\) 大类方式拆出来的组如下:
- \((1)^{12}\) (表示大小为 \(1\) 的组有 \(12\) 个,下同)
- \((4)^3\),为两面和 \(4\) 条对应方向的棱
- \((2)^6\),还是两面和 \(4\) 条对应方向的棱,内部各又细分成 \(2\) 组
- \((1)^2(2)^5\),对角线上的两顶点和对侧面相对顶点之间的边不动,其余边与对侧面不同轴的边配对
- \((3)^4\),\(x, y, z\) 三轴对应面相交换,同时前后翻转
说实话,我认为方式 4 与方式 5 都很难想象出来……
第 4 种暂且不管,其余旋转方式中每组的大小都一样;显然我们可以求出每种颜色够填多少组 (比如一组有 \(3\) 个,红色木棒有 \(9\) 根,则总共能填 \(3\) 组)
考虑抽象出模型;设一组有 \(x\) 个,我们有 \(6\) 种颜色,第 \(i\) 种颜色有 \(\frac{c_i}{x}\) 个,有 \(\frac{12}{x}\) 个球,每个球都要染色,求方案数
这是多重集的排列数;公式为 \(\displaystyle \frac{(\sum \frac{c_i}{x})!}{\prod \frac{c_i}{x}!}\) (当然,如果存在一种颜色不能整除,则方案数为 \(0\))
数据范围很小,对于第 4 种,我们可以把 \((1)^2\) 枚举掉,再套多重集排列数即可
SP422 TRANSP2 - Transposing is Even More Fun
题意:给定 \(2^a \times 2^b\) 的矩阵,将其先从左到右、再从上到下可以写成一行的形式
现在我们用原矩阵写出第一行,将矩阵转置 (行变列、列变行) 后按照同样方式再写出第二行
定义一次操作为交换行中的两个数,求第一行经过至少多少次操作可以变成第二行
多测,\(1 \le t \le 4 \times 10^5\),\(1 \le a+b \le 10^6\)
好题!
令下标从 \(0\) 开始,易得矩阵中 \((x, y)\) 对应行中的第 \(2^bx+y\) 位;交换后 \((x, y) \rightarrow (y, x)\),\(2^bx+y \rightarrow 2^ay+x\)
将原位置向新位置连边,会形成许多小环,对于环长为 \(c\) 的我们需要交换 \(c-1\) 次
设总共有 \(cnt\) 个环,第 \(i\) 个环环长为 \(c_i\),则总交换数为 \(\sum_{i=1}^{cnt} (c_i-1)\)
注意到 \(\sum_{i=1}^{cnt} c_i = 2^{a+b}\),因此总交换数可表示为 \(2^{a+b}-cnt\);这启示我们只需求环的数量,换句话说,就是本质不同位置数
现在看起来和群论有点关系了;不过还要考虑如何刻画连边关系
观察连边性质:
- \(2^bx+y\) 前 \(b\) 位为 \(y\),后 \(a\) 位为 \(x\)
- \(2^ay+x\) 前 \(a\) 位为 \(x\),后 \(b\) 位为 \(y\)
我们发现,其等价于循环左移 \(a\) 位(或者说循环右移 \(b\) 位)
Key Observation1:对位置 \(i\),所有循环左移 \(a\) 位得到的位置在一个环内
进一步转化,即为给定一个长为 \(a+b\) 的环 (每个点代表一位),用黑白进行染色,求本质不同方案数
称两种方案本质相同,当且仅当其中一种可以不断转 \(a\) 位得到第二种
注意到这里转 \(a\) 位很烦,如果直接推式子,无法从 \(\gcd\) 转化为 \(\varphi\) 的形式;那么有没有什么方法可以变成只转 \(1\) 位?
由我们之前已经推过的东西,共有 \(\gcd(a, a+b) = \gcd(a, b)\) 个环
Key Observation2:每个环里拿一个元素,相邻 \(\gcd(a, b)\) 个元素相对位置不变
因此我们可以将每相邻 \(\gcd(a, b)\) 个元素缩成一个点
整理一下,即为给定一个长为 \(\frac{a+b}{\gcd(a, b)}\) 的环,每个位置有 \(2^{\gcd(a, b)}\) 种染色方式,求本质不同方案数
称两种方案本质相同,当且仅当其中一种可以不断转 \(1\) 位得到第二种
记 \(n = \frac{a+b}{\gcd(a, b)}\),\(m = \gcd(a, b)\),模版题已经推过了,这里直接给出最终式子:
\(\displaystyle \frac{1}{n} \sum_{k|n} 2^{km} \varphi(\frac{n}{k})\)
直接 \(O(tn^{\frac{3}{4}})\) 是过不去的;可以 \(O(n \ln n)\) 预处理每个数的因数,筛出欧拉函数,预处理 \(2\) 的幂来优化
时间复杂度 \(O((a+b) \ln (a+b) + tB)\),其中 \(B\) 是 \(a+b\) 以内因数最多的数的因数个数,在 \(a+b = 720720\) 时取到 \(\max = 240\)
P3307 [SDOI2013] 项链
题意:给定 \(n, a\),求满足如下条件的不同项链:
- 项链的每个珠子由三棱柱构成,三棱柱的每个侧面刻有数字;该项链由 \(n\) 个珠子构成
- 每个珠子上的每个数字 \(x\) 都满足 \(1 \le x \le a\),且珠子上三个数字的 gcd 为 \(1\)
- 相邻的两珠子不同;称两珠子相同,当且仅当它们经过旋转或翻转后能变成一样的
- 称两串项链相同,当且仅当它们经过旋转后能变成一样的
求出不同项链数 \(\bmod 10^9+7\) 的值
多测,\(1 \le T \le 10\),\(2 \le n \le 10^{14}\),\(1 \le a \le 10^7\)
二合一题
1. 求本质不同珠子数
两个珠子相同,就是其数字经过重排后完全相同;换句话说,我们要求无序三元组 \((i, j, k)\) 的个数,满足 \(\gcd(i, j, k) = 1\)
可以容斥,不过这里我们直接暴力定序
\(\displaystyle \sum_{i=1}^{a} \sum_{j=i}^{a} \sum_{k=j}^{a} [\gcd(i, j, k) == 1]\)
莫反一下
\(\displaystyle = \sum_{i=1}^{a} \sum_{j=i}^{a} \sum_{k=j}^{a} \sum_{d | \gcd(i, j, k)} \mu(d)\)
\(\displaystyle = \sum_{d=1}^{a} \mu(d) \sum_{i=1}^{\lfloor \frac{a}{d} \rfloor} \sum_{j=i}^{\lfloor \frac{a}{d} \rfloor} \sum_{k=j}^{\lfloor \frac{a}{d} \rfloor} 1\)
\(\displaystyle = \sum_{d=1}^{a} \mu(d) f(\lfloor \frac{a}{d} \rfloor)\)
其中,\(f(x) = \frac{1}{6} x(x+1)(x+2)\)
预处理筛出 \(\mu(i)\),单次查询可以整除分块做到 \(O(\sqrt a)\)
下面记本质不同珠子数为 \(m\)
2. 求本质不同环数
直接上 burnside 引理,可得本质不同环数为 \(\displaystyle \frac{1}{n} \sum_{k|n} f(k)\varphi(\frac{n}{k})\)
其中,\(f(x)\) 表示小环的数量为 \(x\) 时的合法方案数;下面考虑如何求出 \(f(x)\)
由于小环上的元素在不断循环,一段连续的 \(x\) 个元素也在不断循环 (这连续 \(x\) 个元素分属不同环,各自不断循环);那么我们只需考虑这 \(x\) 个元素即可
需要注意,由于第 \(1\) 个元素循环后变为了第 \(x+1\) 个元素,它与第 \(x\) 个元素也不能相同
因此,考虑设 \(f_{i, 0/1}\) 表示填到第 \(i\) 个元素,与第 \(1\) 个元素不相同 / 相同的方案数
转移是简单的:
- \(f_{i, 0} \leftarrow f_{i-1, 0} \times (m-2) + f_{i-1, 1} \times (m-1)\)
- \(f_{i, 1} \leftarrow f_{i-1, 0}\)
直接 \(O(n)\) 递推无法接受,但此时你可以矩阵快速幂优化到 \(O(\log n)\)
不过这里介绍一种更简便的方法
对于二阶线性递推公式 \(a_n = pa_{n-1}+qa_{n-2}\),定义其特征方程为 \(x^2-px-q=0\)
记特征方程两实根为 \(x_1, x_2\),则 \(a_n\) 可表示为 \(k_1 \times (x_1)^n+k_2 \times (x_2)^n\),其中 \(k_1, k_2\) 是待定的系数,一般可通过带入前几项求出
这是因为,若我们设 \(a_n = x_1^n+x_2^n\),则由 \(a_n = pa_{n-1}+qa_{n-2}\) 可得:
- \(x_1^n+x_2^n = p(x_1^{n-1}+x_2^{n-1})+q(x_1^{n-2}+x_2^{n-2})\)
- 当 \(x_1^n = px_1^{n-1}+qx_1^{n-2}\) 且 \(x_2^n = px_2^{n-1}+qx_2^{n-2}\) 恒成立时,即 \(x_1, x_2\) 是 \(x^2-px-q = 0\) 的两根,原式恒成立
将转移式写成只有第二项为 \(0\) 的形式:\(f_{i, 0} = f_{i-1, 0} \times (m-2) + f_{i-2, 0} \times (m-1)\)
注意到这就是二阶线性递推公式的形式,其特征方程为 \(x^2-(m-2)x-(m-1)\),两根 \(x_1 = m-1, x_2 = -1\)
带入 \(f_{1, 0} = 0\) 与 \(f_{2, 0} = m(m-1)\),可得通项公式 \(f_{k, 0} = (m-1)^n+(m-1) \times (-1)^n\)
使用快速幂可以做到 \(O(\log n)\)
还有一个问题:\(n\) 最大有 \(10^{14}\),朴素枚举因数再算 \(\varphi\) 值肯定会炸
这里有个小技巧,可以先 \(O(\sqrt n)\) 分解质因数,再用 dfs \(O(因数个数)\) 维护 \(\varphi\) 值
具体的,我们 dfs 每个质因数的指数,在搜索过程中根据 \(\varphi(n) = n(1-\frac{1}{p_1})(1-\frac{1}{p_2}) \cdots (1-\frac{1}{p_k})\) 动态维护即可
还有一个恶心的情况是 \(n | 10^9+7\) (没有逆元):此时需要完全换一套系统,将模数变为 \((10^9+7)^2\),最后令 \(n \leftarrow \frac{n}{10^9+7}, ans \leftarrow \frac{ans}{10^9+7}\),再取逆元即可;为此你可能需要龟速乘或者开 __int128
时间复杂度约为 \(O(V_a + T(\sqrt a \log mod + \sqrt n + f(n) \log^2 mod))\),其中 \(f(n)\) 表示 \(n\) 的约数个数
P4916 [MtOI2018] 魔力环
题意:给定 \(n, m, k\),求满足如下要求的本质不同环的个数:
- 环上恰好有 \(m\) 个黑珠和 \(n-m\) 个白珠
- 环上不能有一段连续的,长度超过 \(k\) 的黑珠
称两个环本质相同,当且仅当其中一个可以通过旋转得到第二个
求答案对 \(998244353\) 取模的结果
\(1 \le n, k \le 10^5\),\(0 \le m \le 10^5\) 且 \(m \le n\)
直接上 burnside 引理,可得本质不同环数为 \(\displaystyle \frac{1}{n} \sum_{k|n} f(k)\varphi(\frac{n}{k})\),难点仍在求 \(f(x)\)
对于 \(f(x)\),我们只考虑连续的 \(x\) 个元素,且第 \(1\) 个元素与第 \(x\) 个元素相邻 (即成环)
由于有个数限制,dp 但凡用到背包就很难保证时间复杂度,考虑用组合数学的方法解决
具体的,对于 \(f(x)\),每个环的长度为 \(\frac{n}{x}\),记为 \(cnt\)
首先判掉 \(m \nmid cnt\) 或 \((n-m) \nmid cnt\) 的情况,此时显然有 \(f(x) = 0\) (珠子都放不全)
接下来记连续段中黑珠总个数 \(b = \frac{m}{cnt}\),白珠总个数 \(w = \frac{n-m}{cnt}\);考虑转化为先将 \(w\) 个白珠放进去,再在白珠之间插黑珠
具体的,我们枚举第 \(1\) 个白珠前与第 \(w\) 个白珠后放的黑珠个数,剩下的即转化为将一些黑珠划分为几段,每段个数在 \([0, k]\) 间的方案数
用式子写出来为 \(\displaystyle \sum_{i=0}^{\min(b, k)} (i+1) \times g(w-1, b-i)\)
其中,\(i+1\) 表示将 \(i\) 个黑珠分配到首尾的不同方案数,\(g(i, j)\) 表示将 \(j\) 个珠划分为 \(i\) 段且每段个数在 \([0, k]\) 间的方案数
下面考虑如何求 \(g(i, j)\)
这是经典的容斥问题;注意到只限制下界是好做的,于是我们对不合法段数 \(c\) 容斥,转化为几段下界为 \(k+1\),其余下界为 \(0\),套个不定方程非负整数解数即可
单次复杂度约为 \(O(\frac{n}{k} \times k) = O(n)\)
用上道题 dfs 枚举因数同时算 \(\varphi\) 的技巧,总复杂度约为 \(O(n \times f(n))\),其中 \(f(n)\) 表示 \(n\) 的约数个数
P4128 [SHOI2006] 有色图
题意:若一张无向完全图的每条边都被染上颜色,我们称其为有色图;若两张有色图顶点数相同,且经过顶点编号的重排,能使两张图对应边的颜色相同,我们称这两张有色图同构
对于所有顶点数为 \(n\),颜色种类不超过 \(m\) 的有色图,求两两间不同构的有色图的数量;答案对质数 \(p\) 取模
\(1 \le n \le 53\),\(1 \le m \le 1000\),\(n < p \le 10^9\)
直接考虑边置换是困难的;我们考虑由点置换生成边置换
显然,对于每种点置换,都会生成一种不同的边置换;现在我们希望求生成的边置换能拆出的轮换个数,再套下 Pólya 定理就做完了
将点置换拆成轮换的形式,每个点都在一个轮换内转圈;注意到我们只关心轮换大小,不关心轮换内具体是哪些点,不妨将所有轮换写成 \(c_1, c_2, \cdots, c_k\) 的形式,其中 \(c_i\) 代表轮换 \(i\) 的大小
将边看成两个点的组合,不妨设这两点分别在点轮换 \(i, j\) 中:
- \(i = j\),则每过 \(c_i\) 次就会转回来
- \(i \ne j\),点 \(i\) 过 \(c_i\) 次转回来,点 \(j\) 过 \(c_j\) 次转回来,总共最少 \(lcm(c_i, c_j)\) 次后就会同时转回来
更普遍的,我们考虑由点轮换求能产生的边轮换数:
- 对同一点轮换 \(c_i\):
- \(c_i\) 为奇数,选两不同点,能产生 \(\frac{c_i(c_i-1)}{2}\) 条边;一个边轮换大小为 \(c_i\),共能产生 \(\displaystyle \frac{\frac{c_i(c_i-1)}{2}}{c_i} = \frac{c_i-1}{2}\) 个边轮换
- \(c_i\) 为偶数,此时有一种特殊情况是两点相隔恰好半周期 (边是双向的,转半圈就转回来了),共能产生 \(\displaystyle \frac{\frac{c_i(c_i-1)}{2}-\frac{c_i}{2}}{c_i}+1 = \frac{c_i}{2}\) 个边轮换
- 综上,共能产生 \(\displaystyle \lfloor \frac{c_i}{2} \rfloor\) 个边轮换
- 对两不同点轮换 \(c_i, c_j\):
- 能产生 \(c_i \times c_j\) 条边,一个边轮换大小为 \(lcm(c_i, c_j)\),共能产生 \(\displaystyle \frac{c_i \times c_j}{lcm(c_i, c_j)} = \gcd(c_i, c_j)\) 个边轮换
综上,对一组点轮换 \(c_1, c_2, \cdots, c_k\),能产生的边轮换数为 \(\displaystyle \sum_{i} \lfloor \frac{c_i}{2} \rfloor + \sum_{i<j} \gcd(c_i, c_j)\)
接下来,我们考虑由多少个点置换可以产生每个轮换大小为 \(c_1, c_2, \cdots, c_k\) 的点轮换
首先,我们将 \(n\) 个人排列,有 \(n!\) 种方法;排列后按顺序分配到 \(\{c\}\) 中,对每个 \(c_i\) 中的排列方案,环上转 \(1, 2, \cdots, c_i\) 圈后本质都相同,还要除掉 \(c_i\) (本质上是拆成很多个圆排列)
那么总方案数就是 \(\displaystyle \frac{n!}{\prod_i c_i}\) 么?
注意,这里有个坑点:对于大小相同的所有 \(c_i\),它们的前后顺序实际上没有区别
因此我们记 \(s_i\) 表示 \(\{c\}\) 中大小为 \(i\) 的轮换个数,最终还要除掉 \(s_i!\);总方案数为 \(\displaystyle \frac{n!}{\prod_i c_i \prod_i s_i!}\)
完整的 Pólya 定理式子为 \(\displaystyle \frac{1}{n!} (\sum_{\{c\}} (\frac{n!}{\prod_i c_i \prod_i s_i!} \times m^{(\sum_{i} \lfloor \frac{c_i}{2} \rfloor + \sum_{i<j} \gcd(c_i, c_j))}))\)
注意到两个 \(n!\) 抵消了,因此为 \(\displaystyle \sum_{\{c\}} (\frac{m^{(\sum_{i} \lfloor \frac{c_i}{2} \rfloor + \sum_{i<j} \gcd(c_i, c_j))}}{{\prod_i c_i \prod_i s_i!}})\)
看起来这个式子很难优化;不过事实上 \({c}\) 的个数不多,直接暴搜即可
时间复杂度大概 \(\displaystyle O((\sum_{c \in \text{Partition}(n)} |c|^2) \times \log n)\),其中 \(\text{Partition(n)}\) 代表 \(n\) 的分拆数
P4727 [HNOI2009] 图的同构计数
题意:若 \(A\) 图的顶点经过重新标号后,使得 \(A\) 图顶点集与边集与 \(B\) 图完全一一对应,则称 \(A\) 图与 \(B\) 图同构
对于顶点数为 \(n\) 的 \(\displaystyle 2^{\frac{n(n-1)}{2}}\) 个图,求有多少个两两不同构的图;答案模质数 \(997\)
\(0 \le n \le 60\)
双倍经验;这里就是想提一下这个转化
将是否有边看成边的两种颜色,与上题完全一样
Bonus
题意:设 \(S_n\) 为所有大小为 \(n\) 的置换构成的集合,对于 \(\sigma \in S_n\),令 \(v(\sigma)\) 为集合 \(\{\mu^{-1} \sigma \mu\ |\ \mu \in S_n\}\) 中的元素数量
给定 \(k\),多次询问,每次给出 \(n\),求 \(\displaystyle \sum_{\sigma \in S_n} v(\sigma)^k\);答案对 \(998244353\) 取模
\(1 \le t \le 10^3\),\(1 \le k \le 10^9\),\(1 \le n \le 2 \times 10^5\)
考虑 \(\mu^{-1} \sigma \mu\) 实际上是什么;不妨设 \(\mu\) 将元素 \(i\) 置换到 \(\mu(i)\),\(\sigma\) 将元素 \(i\) 置换到 \(\sigma(i)\)
那么对于 \(\mu^{-1} \sigma \mu\),其进行了 \(\mu(i) \rightarrow i \rightarrow \sigma(i) \rightarrow \mu(\sigma(i))\) 的置换
考虑将 \(i \rightarrow \sigma(i)\) 连边 (也就是将 \(\sigma\) 写成轮换形式),会形成许多小环,我们只是在每个环上同时施加了 \(\mu\)
这启示我们,环内的元素是什么不重要 (因为施加 \(\mu\) 后想置换成什么都行),我们只关心环的大小
类比上题,设 \(\sigma\) 中大小为 \(i\) 的环有 \(c_i\) 个,即有:
那么答案即为:
P.S. 因为需要乘 \(\sigma\) 等价类的大小,所以是 \(k+1\) 次幂而非 \(k\) 次幂
注意到有 \(\sum_i ic_i = n\) 的结构,考虑设生成函数 \(F_i(x)\) 刻画大小为 \(i\) 的环对答案式子的贡献:
因此,答案式子为:
由于 \(F_i(x)\) 中 \(i\) 是不变量,考虑将 \(i, j\) 分离:
这启示我们再定义一个与 \(i\) 无关的生成函数,令:
则有:
对于连乘,考虑经典套路,取 \(\ln\) 将其变为求和,令:
则有:
\(g_j\) 可用多项式 \(\ln\) 求出,因此后面和式的系数可以 \(O(n \ln n)\) 求得,最后再做一遍多项式 \(\exp\) 就结束了
时间复杂度 \(O(n \log n)\)
LOJ6538. 烷基计数 加强版 加强版
题意:求 \(n\) 个碳原子的烷基共有多少种同分异构体
形式化的,你需要求 n 个点的满足如下条件的本质不同的无标号有根树的数目
- 每个点度数不超过 \(4\)
- 根的度数不超过 \(3\)
答案模 \(998244353\)
\(1 \le n \le 10^5\)
考虑设 \(F(x)\) 为答案的生成函数
注意到根 \(u\) 的子树与以 \(u\) 为根的整棵树结构类似;因此可以做类似 DP 转移的操作,体现在整体上就是关于 \(F(x)\) 的一个方程
具体的,由于需要保证本质不同,考虑枚举对于 \(u\) 儿子的置换:
- 形如 \(\begin{pmatrix} 1 & 2 & 3 \\ 1 & 2 & 3 \end{pmatrix}\),轮换大小为 \((1\ 1\ 1)\),共 \(1\) 种;此时三个儿子随便填,转移为 \(F(x) \leftarrow xF^3(x)+1\)
- 形如 \(\begin{pmatrix} 1 & 2 & 3 \\ 1 & 3 & 2 \end{pmatrix}\),轮换大小为 \((1\ 2)\),共 \(3\) 种;此时有两个儿子需相同,转移为 \(F(x) \leftarrow xF(x)F(x^2)+1\)
- 形如 \(\begin{pmatrix} 1 & 2 & 3 \\ 2 & 3 & 1 \end{pmatrix}\),轮换大小为 \((3)\),共 \(2\) 种;此时三个儿子都需相同,转移为 \(F(x) \leftarrow xF(x^3)+1\)
对转移的解释:
- 乘 \(x\) 代表多拼上根,点数整体 \(+1\)
- 最后 \(+1\) 代表可以没有点 (或者说只有一个 H 原子)
- \(F^k(x)\) 代表有 \(k\) 个子树可以随便填
- \(F(x^k)\) 代表有 \(k\) 个子树需相同,将原本的一份复制成 \(k\) 份,点数 \(\times k\),方法数不变
整体的式子为:
注意到式子中有 \(F(x^2), F(x^3)\),一种想法是分治 FFT;事实上,得到关于 \(F(x)\) 的方程也启示我们牛顿迭代,由于已知 \(F(x) \bmod x^k\) 时,\(F(x^2) \bmod x^{2k}, F(x^3) \bmod x^{2k}\) 均确定,正确性没有问题
考虑牛顿迭代的证明:
令 \(F_{\triangle}(x)\) 为 \(F(x) \bmod x^k\),将 \(G(F(x))\) 在 \(F_{\triangle}(x)\) 处泰勒展开,可得
$ \displaystyle G(F(x)) = G(F_{\triangle}(x))+\frac{G'(F_{\triangle}(x)}{1!} (F(x)-F_{\triangle}(x))+\frac{G''(F_{\triangle}(x))}{2!}(F(x)-F_{\triangle}(x))^2+\cdots$
由于 \(F(x)-F_{\triangle}(x)\) 的最低次项至少为 \(x^k\),\(\bmod\ x^{2k}\) 意义下二阶导及以后的部分全消了,整理后即得证
这里考虑将 \(G\) 写作关于 \(F(x), F(x^2), F(x^3)\) 的多元函数;已知多元函数泰勒展开就是以每个变元为主元分别泰勒展开 (求导变为偏导),由于 \(F(x^2) \equiv F_{\triangle}(x^2)\ (\bmod\ x^{2k})\),可得
\(\displaystyle \begin{cases} G(F(x^2)) \equiv G(F_{\triangle}(x^2))\ (\bmod\ x^{2k}) \\ F(x^2)-F_{\triangle}(x^2) \equiv 0\ (\bmod\ x^{2k}) \end{cases}\)
那么以 \(F(x^2)\) 为主元时式子全消了;\(F(x^3)\) 同理
综上,求牛迭式子中的 \(G'(F(x))\) 时直接将 \(F(x^2), F(x^3)\) 看成常多项式处理即可
这里给出牛迭的式子:
边界为 \(F(0) = 1\),直接做即可;时间复杂度 \(O(n \log^2 n)\)
P6597 烯烃计数
题意:求化学式为 \(\text{C}_{n}\text{H}_{2n}\) 的烯烃的同分异构体个数,不考虑空间异构与顺反异构
形式化的,有 \(n\) 个点,点无标号;求满足以下条件的本质不同的无标号树的个数:
- 存在一条特殊边 \((u, v)\),视该边与其他树边不同;两端点 \(u, v\) 需满足 \(u, v\) 的度数均 \(\le 3\) (碳碳双键)
- 每个点的度数不超过 \(4\)
答案模 \(998244353\)
\(1 \le n \le 10^5\)
考虑从特殊边 (碳碳双键) 处入手,设其为 \((u, v)\)
将这条边抽象为原树的根,其有且仅有两儿子 \(u, v\);易得 \(u, v\) 的每个子树都为上道题的结构 (烷基)
先只考虑一边,不妨设烷基的生成函数为 \(F(x)\),\(u\) 子树的生成函数为 \(P(x)\);与上道题类似,考虑枚举置换:
- 形如 \(\begin{pmatrix} 1 & 2 \\ 1 & 2 \end{pmatrix}\),轮换大小为 \((1\ 1)\),共 \(1\) 种;此时两个儿子随便填,转移为 \(P(x) \leftarrow xF^2(x)\)
- 形如 \(\begin{pmatrix} 1 & 2 \\ 2 & 1 \end{pmatrix}\),轮换大小为 \((2)\),共 \(1\) 种;此时两个儿子需相同,转移为 \(P(x) \leftarrow xF(x^2)\)
注意这里最后不 \(+1\),因为关键边不能没有端点 (碳碳双键不能连 \(\text{H}\) )
因此,我们有
设答案的生成函数为 \(G(x)\);类似的,枚举 \(u, v\) 子树间的置换,可得
注意这里最后不乘 \(x\),因为没有多拼上点
根据上式直接求即可;时间复杂度 \(O(n \log^2 n)\)
P6598 烷烃计数
题意:求化学式为 \(\text{C}_n\text{H}_{2n+2}\) 的烷烃的同分异构体个数,不考虑立体异构
形式化的,求 \(n\) 个点的满足每个点的度数不超过 \(4\) 的,本质不同的无标号无根树的数目
答案模 \(998244353\)
\(1 \le n \le 10^5\)
无根树不好做,考虑钦定一个点为根变为有根树
由于一棵树最多有两个重心,考虑钦定重心为根,好处是可以大大简化容斥的式子
设钦定的根为 \(u\),注意到 \(u\) 的子树仍为上上道题的结构 (烷基),套路地枚举 \(4\) 个儿子间的置换
设 \(F(x)\) 为烷基的生成函数;由重心的性质,用到的 \(F(x)\) 的最高次不能超过 \(\lfloor \frac{n}{2} \rfloor\),因此令 \(F(x) \leftarrow F(x) \bmod x^{\lfloor \frac{n}{2} \rfloor+1}\),答案即为:
若原树存在两个本质不同的重心,答案会被多算一次;设两重心为 \(u, v\),易得:
- 以 \(u\) 为根时,\(siz_v \le \lfloor \frac{n}{2} \rfloor\)
- 以 \(v\) 为根时,\(siz_u \le \lfloor \frac{n}{2} \rfloor\)
- \(siz_v+siz_u = n\) (两重心相邻)
综上,仅 \(n\) 为偶数时可能算重,此时 \(siz_u = siz_v = \frac{n}{2}\)
更进一步,\(u\) 子树与 \(v\) 子树本质相同/不同 \(\implies\) 重心 \(u, v\) 本质相同/不同
- 当 \(u\) 子树与 \(v\) 子树本质不同时,显然重心 \(u, v\) 本质不同
- 当 \(u\) 子树与 \(v\) 子树本质相同时,\(u\) 的子树与 \(v\) 的子树必然能够两两配对,此时重心 \(u\) 与 \(v\) 本质相同
很好的事情是,本质不同的 \(u\) 子树个数我们已经算出来了,就是 \([x^{\frac{n}{2}}] F(x)\),记为 \(q\);那么使 \(u\) 子树与 \(v\) 子树本质不同的方法数就是 \(C_{q}^{2}\)
综上,答案即为 \(p-[n \equiv 0\ (\bmod\ 2)]\ C_{q}^{2}\)
时间复杂度 \(O(n \log^2 n)\)
后记
可能会不定期加入一些生成函数相关题目。咕咕咕。
参考了

浙公网安备 33010602011771号