一些概念
群
设有一个集合 (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 (
egin{array}{**lr**}
a_1 & a_2 & cdots & a_n\
a_{p_1} & a_{p_2} & cdots & a_{p_n}
end{array}
ight )
),表示将 (a_i) 映射为 (a_{p_i}) 。
(其中,(p_1,p_2, cdots ,p_n) 为 (1) 到 (n) 的一个排列)
(S) 上所有置换的数量为 (n!) 。
置换的乘法
对于两个置换 (f=
left (
egin{array}{**lr**}
a_1 & a_2 & cdots & a_n\
a_{p_1} & a_{p_2} & cdots & a_{p_n}
end{array}
ight )
) 和 (g=
left (
egin{array}{**lr**}
a_{p_1} & a_{p_2} & cdots & a_{p_n}\
a_{q_1} & a_{q_2} & cdots & a_{q_n}
end{array}
ight )
) ,
(f) 和 (g) 的乘积记为 (f circ g) ,
(f circ g=) (
left (
egin{array}{**lr**}
a_1 & a_2 & cdots & a_n\
a_{q_1} & a_{q_2} & cdots & a_{q_n}
end{array}
ight )
) 。
本质上,就是让 (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 (
egin{array}{**lr**}
a_1 & a_2 & cdots & a_{n-1} & a_n\
a_2 & a_3 & cdots & a_n & a_1
end{array}
ight )
) 。
若两个循环置换不含有相同的元素,则称它们是不相交的。
任意一个置换都可以分解为若干个不相交的循环置换的乘积。
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 (mod n)) 。
这个式子等价于 (ki mod 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 引理即可。