Polya 定理
一些概念
群
设有一个集合 \(G\) ,再设一种作用于 \(G\) 的二元运算 \(X\) 。
若其满足以下 \(4\) 个性质,则称其为一个群,记为 \((G,X)\) :
\(1.\) 封闭性:若 \(a \in G\) , \(b \in G\) ,则有 \(a\ X\ b \in G\) 。
\(2.\) 结合律:对于任意 \(a \in G\) , \(b \in G\) , \(c \in G\) ,有 \((a\ X\ b)\ X\ c=a\ X\ (b\ X\ c)\) 。
\(3.\) 单位元:存在 \(e \in G\) ,使得对于任意 \(a \in G\) ,有 \(a\ X\ e=e\ X\ a\) 。称 \(e\) 为单位元,单位元唯一。
\(4.\) 逆元:
对于任意 \(a \in G\) , 存在 \(b \in G\) ,使得 \(a\ X\ b=b\ X\ a=e\) (此处的 \(e\) 指单位元)。
称 \(b\) 为 \(a\) 的逆元,记 \(b=a^{-1}\) 。逆元也唯一。
子群
若 \((G,X)\) 是群, \(S\) 是 \(G\) 的非空子集,且 \((S,X)\) 也是群,则称 \((S,X)\) 是 \((G,X)\) 的子群。
置换
一个集合 \(S=\{a_1,a_2, \cdots ,a_n\}\) 上的置换可以表示为 \(f=
\left (
\begin{array}{**lr**}
a_1 & a_2 & \cdots & a_n\\
a_{p_1} & a_{p_2} & \cdots & a_{p_n}
\end{array}
\right )
\),表示将 \(a_i\) 映射为 \(a_{p_i}\) 。
(其中,\(p_1,p_2, \cdots ,p_n\) 为 \(1\) 到 \(n\) 的一个排列)
\(S\) 上所有置换的数量为 \(n!\) 。
置换的乘法
对于两个置换 \(f=
\left (
\begin{array}{**lr**}
a_1 & a_2 & \cdots & a_n\\
a_{p_1} & a_{p_2} & \cdots & a_{p_n}
\end{array}
\right )
\) 和 \(g=
\left (
\begin{array}{**lr**}
a_{p_1} & a_{p_2} & \cdots & a_{p_n}\\
a_{q_1} & a_{q_2} & \cdots & a_{q_n}
\end{array}
\right )
\) ,
\(f\) 和 \(g\) 的乘积记为 \(f \circ g\) ,
\(f \circ g=\) \(
\left (
\begin{array}{**lr**}
a_1 & a_2 & \cdots & a_n\\
a_{q_1} & a_{q_2} & \cdots & a_{q_n}
\end{array}
\right )
\) 。
本质上,就是让 \(a_1,a_2, \cdots ,a_n\) 先经过 \(f\) 的映射,再经过 \(g\) 的映射。
置换群
同样设一个集合 \(S=\{a_1,a_2, \cdots ,a_n\}\) ,
可以得到,集合 \(S\) 上的所有置换关于置换的乘法构成一个群。
这个群的任意一个子群即称为置换群。
循环置换
循环置换是一类特殊的置换,可表示为
\((a_1,a_2, \cdots ,a_n)=\) \(
\left (
\begin{array}{**lr**}
a_1 & a_2 & \cdots & a_{n-1} & a_n\\
a_2 & a_3 & \cdots & a_n & a_1
\end{array}
\right )
\) 。
若两个循环置换不含有相同的元素,则称它们是不相交的。
任意一个置换都可以分解为若干个不相交的循环置换的乘积。
Burnside 引理
对于一个置换 \(f\) ,若 \(S\) 经过置换后不变,则称 \(S\) 为 \(f\) 的不动点。
设 \(C(S)\) 表示 \(S\) 这个置换的不动点数量, \(L\) 表示本质不同的方案数(即答案) ,
则 \(L=\frac{1}{|G|} \sum \limits_{a \in G} C(a)\) 。
其中, \(G\) 为一个置换群,是会产生等价方案的置换的集合。 \(|G|\) 表示 \(G\) 的大小。
(例如,在染色问题中,\(G\) 即为所有翻转操作的置换的集合)
但是,计算不动点个数过于繁琐,所以引入 Polya 定理。
Polya 定理
其实, Polya 定理和 Burnside 定理并没有本质上的区别,仅仅是优化了计算不动点个数的部分。
设两个集合 \(A\) , \(B\) ,表示问题本质上就是从 \(A\) 到 \(B\) 的映射。
(例如,同样在染色问题中,\(A\) 为点集, \(B\) 为颜色的集合)
定义 \(c(S)\) 表示置换 \(S\) 能拆分成的不相交的循环置换的数量,
则 \(L=\frac{1}{|G|} \sum \limits_{a \in G} |B|^{c(a)}\) 。
证明
考虑若 \(S\) 是置换 \(f\) 的不动点,则对于 \(f\) 可拆分成的每个不相交的循环置换, \(S\) 中这些元素的值一定是相等的。
每个循环置换可以分配到一个值,共有 \(|B|\) 个值,所以 \(C(a)=|B|^{c(a)}\) 。
把上式代入 Burnside 引理,即可得到 Polya 定理。
例题
1
有一个长度为 \(n\) 的环,上面写着'X'和'E',问本质不同的环有多少种。(\(n \leq 200000\))
(本质不同,指经过旋转后不同)
在这个问题中, \(G\) 就是旋转 \(1\) 到 \(n-1\) 次分别对应的置换。
所以,这个问题本质上就是在求旋转 \(i\) 次时对应的置换所能拆分成的不相交的循环置换的数量。
考虑旋转 \(i\) 次时, \(1\) 会映射到 \(i+1\) , 再映射到 \(2i+1\) \(\cdots\) 。
显然,它们处于同一个循环置换中。
所以,单个循环置换的大小就是找到一个最小的 \(k\) ,使得 \(ki+1 \equiv 1\ (\bmod \ n)\) 。
这个式子等价于 \(ki \bmod n=0\) ,所以 \(k=\frac{lcm(n,i)}{i}\) 。
因为每个循环置换长度相等,所以这个置换能拆分成 \(\frac{ni}{lcm(n,i)}=\gcd(n,i)\) 个循环置换。
套用 Polya 定理算即可。
接下来,考虑一个加强的版本。
有 \(n\) 种颜色,且 \(n \leq 10^9\) 。
想要优化复杂度,只能优化式子。
\(\frac{1}{n} \sum \limits_{i=1}^nn^{\gcd(n,i)}\)
枚举 gcd ,变为
\(\frac{1}{n} \sum_{d|n}n^d*\sum \limits _{i=1}^{\frac{n}{d}}[\gcd(i,\frac{n}{d})=1]\) ,
即 \(\frac{1}{n} \sum_{d|n}n^d*\varphi(\frac{n}{d})\) 。
其中,欧拉函数可以直接暴力算。
2.[HNOI2008]Cards
因为题目中有这样一句限制,
输入数据保证任意多次洗牌都可用这 m 种洗牌法中的一种代替,且对每种洗牌法,都存在一种洗牌法使得能回到原状态。
所以,所有洗牌法构成的集合满足封闭性、结合律、有逆元。
但是,还没有单位元,所以并不能构成群,无法使用 Burnside 引理或 Polya 定理计算。
所以,要加入一个自己映射到自己的置换,这样就有单位元了,且不会对答案产生影响。
因为有每种颜色数量的限制,所以不能用 Polya 定理,所以考虑用 Burnside 引理。
对于每个置换,算出它能拆分成的每个循环置换的大小,用类似背包的方法求出方案数,套用 Burnside 引理即可。