Burnside 引理

本文只讲一些 Burnside 引理 的应用,证明啥的不会,因为计算机科学家不需要证明。

一些抽象的定义非常不严谨,但是比较通俗易懂,大佬勿喷,因为初三 oier 不会群论。

内容

Burnside 引理主要用来解决对于一些变换,求本质不同方案数的问题。

对于这些变换,是有要求的,就是它们要形成一个“群”。因为群的定义比较抽象,你可以认为就是要求这些变换时封闭的。

洛谷 P4980 为例。这个题中的变换是旋转,转两下还是一种旋转。设变换方式组成的集合为 \(G\),那么对于任意 \(x, y \in G\),要满足 \(x \cdot y \in G\),就是先做 \(x\) 在做 \(y\) 的结果也在 \(G\) 里。类似的还有翻转,这个也是封闭的。

Burnside 引理:本质不同的方案数 $ = \frac{1}{|G|} \sum\limits_{x \in G} 在 x 下不变的方案数$ 。证明 CTJ 去吧。

还是以旋转为例,它的变换就是 \(n\) 种旋转(只是旋转角度不同)。那么旋转本质不同的方案数就是 \(\frac{1}{n}\sum\limits_{x = 0}^{n - 1} (顺时针)转 \ x \ 下不变的方案数\)(方向无所谓)。

举个例子,设 \(n = 4\),进行 \(4\) 染色。那么转 \(0\) 次不变的方案数是 \(4^4 = 256\)(每个点独立),转 \(1\) 次不变的方案数为 \(4^1 = 4\)(每个点的颜色都相同),转 \(2\) 次不变的方案数为 \(4^2 = 16\)(第一个颜色与第三个相同,第二个与第四个相同),转 \(3\) 次不变的就是 \(4^1 = 4\)(与转 \(1\) 次是等价的。)

不理解可以见下图(连线表示颜色要一样。)答案就是 \(\frac{1}{4}(256 + 4 + 16 + 4) = 70\)

image

那么对于这个题,设转了 \(x\) 下,那么会形成 \(\gcd(x, n)\) 组,每组内的点颜色相同,那么答案就是

\[\sum\limits_{x = 0}^{n - 1} n^{\gcd(x, n)} = \sum\limits_{x = 1}^n n^{\gcd(x, n)} \]

考虑优化,可以枚举 \(d = \mid n\),求有多少个 \(x\) 满足 \(\gcd(x, n) = d\),即 \(\gcd(\frac{n}{x}, \frac{n}{d}) = 1\)。又因为 \(1 \le x \le n\),则有 \(\varphi(\frac{n}{d})\)\(x\) 满足要求,所以总方案数就是:

\[\frac{1}{n}\sum\limits_{d | n} n^d \varphi(\frac{n}{d}) \]

[MtOI2018] 魔力环 - 洛谷 P4916

有一个由 \(n\) 个珠子组成的环,每个珠子有黑白二色。一个环是美妙的当且仅当:

  • 环上恰有 \(n\) 个珠子是黑色的,\(n - m\) 个珠子是白色的。
  • 不会出现连续的 \(k + 1\) 个黑色珠子。

问有多少个本质不同的环是美妙的,两个环不同当且仅当不能通过旋转使一个环变成另一个。

\(n, k \le 10^5, m \le n\)

和上个题一样,还是求旋转 \(x\) 下后不变的方案数。实际上就是第 \(i\) 个珠子和第 \(i + \gcd(x, n)\) 个的颜色相同即可。也就是说整个环是由大小为 \(d\) 的串循环 \(\frac{n}{d}\) 次组成。

如果 \(m < n\),那么问题就可以转化为有多少个长度 \(d\) 的环是美妙的。(因为两个串拼接的黑色串也算)

要特判一下 \(n = m\) 的情况。

设这个环内有 \(p = m\frac{d}{n}\) 个黑色珠子,\(q = (n - m)\frac{d}{n}\) 个白色珠子(所以要求 \(n / d\)\(m\) 的因子)。先把 \(q\) 个白色珠子放好,那么有 \(q\) 个空位,设每个空位有 \(x_i(1 \le i \le q)\) 个黑色珠子,那么要求:

  • \(\sum x_i = p\)
  • \(x_i \le k\)

这是一个经典问题,进行容斥,枚举有至少多少个 \(x_i > k\) 即可。不会的去看”硬币购物“。

还有一点,因为这个环实际上是一个大小为 \(d\) 的串,那么这样一个环其实对应了很多个串,需要枚举 \(x_1\),那么有 \(x_1 + 1\) 种方案断环为链,即一个串的开头可能有 \(0, 1, 2, \dots x_1\) 个黑色珠子,所以方案数还要乘 \(x_1 + 1\)。(可以理解为这个串循环移动得到的串实际上是本质相同的,所以一个环对应很多个串)

时间复杂度:

  • 对于每个 \(d\),枚举 \(x_1\)\(O(k)\)

  • 容斥时枚举有多少个 \(x_i > k\)\(O(\frac{p}{k})\)

  • 不妨设 \(t = \frac{n}{d}\),那么 \(t \mid \gcd(n, m)\),且对于每个 \(t\) 花费 \(O(p) = O(\frac{m}{t})\) 的时间,总时间复杂度:\(O(σ(\gcd(n, m)))\)\(σ\) 是约数和

[HNOI2008] Cards - 洛谷 P1446

\(n\) 张牌,\(m\) 种洗牌方式,每种洗牌方式给定序列 \(x\),表示第 \(i\) 位变为原本第 \(x_i\) 位的牌。

输入数据保证任意多次洗牌都可用这 \(m\) 种洗牌法中的一种代替,且对每种洗牌法,都存在一种洗牌法使得能回到原状态。

现在给 \(n\) 张牌进行染色,有三种颜色红蓝绿,要求出现 \(c_1\) 张红色,\(c_2\) 张蓝色,\(c_3\) 张绿牌。

问有多少种本质不同的染色方式。(通过洗牌不能使一种洗成另一种。)

\(\max\{c_1, c_2, c_3\} \le 20, m \le 60\)

首先我们分析一下题目条件,什么叫做 “任意多次洗牌都可用这 \(m\) 种洗牌法中的一种代替”?不就是说这 \(m\) 种洗牌法可以形成一个群吗。

当然还有假设 \(x = \{1, 2, \dots , n\}\) 这种洗牌方式,因为不洗牌也是一种,而且洗回原样也是可以的。

那么就直接套 Burnside 引理 了,对于每种洗牌法,计算有多少种染色方式,在洗牌前后颜色是一样的。

我们将 \(x_i\)\(i\) 连边,会形成若干个环,那么一个环内的牌颜色必须相同,直接进行背包 DP 即可。

时间复杂度:\(O(mn(maxc^2))\)

[HNOI2009] 图的同构计数 - 洛谷 P4727

给定 \(n\),问有多少个在同构意义下,有 \(n\) 个节点的简单图。(最多 \(n(n - 1) / 2\) 条边)

A 图与 B 图被认为是同构的是指:A 图的顶点经过一定的重新标号以后,A 图的顶点集和边集要完全与 B 图一一对应。

\(n \le 60\)

双倍经验

相当于给每条边染一种颜色,两个题区别在于一个固定的两种颜色,一个给了 \(m\) 种颜色。

设 A 中的 \(i\) 号节点对应 B 中的 \(x_i\) 号节点,那么 \(x\) 就是一种变换,总共 \(n!\) 种变换就形成了一个群。

还是考虑 Burnside 引理,也就是说对于每种变换 \(x\),A 图变换为 B 图,有多少种染色方式满足对于任意 \((u, v)\),在 A 中的颜色和 B 中的相同。

对于变换 \(x\),还是会形成若干个环,我们把边分成环内的与环之间的进行考虑。

环内边

设环长为 \(k\),设 \(u, v\) 之间的距离为 \(d\)(算劣弧的边),也就是 \(d \le k / 2\),那么对于所有这样的 \((u, v)\),它们的颜色必须相同(同时位移)。所以总共有 \(\lfloor \frac{k}{2} \rfloor\) 个组边。

\(k = 5, 6\) 为例,相同颜色边表示这些边在同一组,颜色必须一致。不同组的没有要求。

\(k = 6\)\(3\) 组, \(k = 5\) 有两组。

image

环间边

设两个环的环长为 \(l_1, l_2\),两个环都按顺时针依次编号,从 \(0\) 开始。设第一个环的节点 \(u\) 与第二个环的节点 \(v\) 连边 。那么 \(col(u, v) = col((u + 1) \% l1, (v + 1) \% l2)\)

\((u, v)\) 开始往后跳,又调回了 \((u, v)\) 总共跳了 \(k\) 步,则 \(l1 | k, l2 | k\),所以 \(\text{lcm}(l1, l2) | k\)。所以这么跳就会形成 \(\gcd(l1, l2)\) 个环,每个环包含 \(\text{lcm}(l1, l2)\) 条边,也就是分成了 \(\gcd(l1, l2)\) 组。

自己画一下吧,比较丑。


于是设变换 \(x\) 形成 \(c\) 个环,大小依次为 \(a_1, a_2, \dots a_c\),那么有 \(m^{\sum\limits_{i = 1}^c \lfloor \frac{a_i}{2} \rfloor + \sum\limits_{i = 1}^c\sum\limits_{j = i + 1}^c \gcd(a_i, a_j)}\) 种染色方案。

但是总共 \(n!\) 种变换,显然是不可以直接枚举的。如何优化?

注意到答案之和环长有关,不妨设有 \(cnt_i\) 个环大小为 \(i\),那么答案就是:

\[m^{(\sum\limits_{i = 1}^n cnt_i \cdot\lfloor \frac{i}{2} \rfloor + \frac{cnt_i(cnt_i - 1)}{2}i) + \sum\limits_{i = 1}^n\sum\limits_{j = i + 1}^n cnt_i \cdot cnt_j \cdot \gcd(i, j)} \]

那么这样有多少个 \(cnt\) 数组,答案其实就是 \(n\) 的无序拆分数 \(p(n)\)A296010 - OEIS\(p(60) < 10^6\)

还有一个问题,\(cnt\) 数组对应多少个变换 \(x\)?自己推一推,这里报个答案:

\[\frac{n!}{\prod\limits_{i= 1}^n cnt_i! \cdot i^{cnt_i}} \]

预处理 gcd\(m^p\),搜索 cnt,使用 \(O(K^2)\) 的复杂度计算,\(K\)\(\sum\limits_{i = 1}^ n[cnt_i > 0]\)。加点搜索剪枝即可通过。

当然可以直接打表通过。

时间复杂度:\(O(可过)\)

posted @ 2026-01-08 23:14  xiehanrui0817  阅读(9)  评论(0)    收藏  举报