先简单介绍一下置换群burnside引理

置换群


满足如下性质:
1. 封闭性
2. 结合性
3. 单位元
4. 逆元
置换群
置换群Sn满足群的所有性质,Sn中的元素:置换。
置换可表示为如下形式:其中,ai为1到n的排列。
(123na1a2a3an)
定义置换p的乘法运算:
p1=(12343124)p2=(12344321)
p1p2=(12343124)(12344321)=(12343124)(31242431)
=(12342431)=(124)(3)=(3)(124)

burnside引理

可将任一置换p分解为若干不相交的循环的乘积。
接下来提到的置换,默认将置换p分解为若干不相交的循环的乘积。
共轭类
p=(1234521453)=(12)(345)
将一个循环的长度称为一个循环的阶,k阶循环出现ck次,用(k)ck表示。如p=(2)1(3)1.
Sn中具有相同格式的置换全体构成一个共轭类。
Sn中属于(1)c1(2)c2(3)c3(n)cn共轭类的元素个数:

n!i=1n(ci!ici)

k不动置换类
设置换群G={p1,p2,,pg}
G中使k保持不变的置换全体,称为k不动置换类,记做Zk .
等价类
定义关系R:piG,使kj,则称kRj.
如果满足:
1.kRk(自反性)
2.kRj,jRk(对称性)
3.kRjjRlkRj(传递性)
则称R[1,n]上的一个等价关系。
置换群G[1,n]划分成了若干等价类,元素k所属的等价类记为Ek
结论
|Ek||Zk|=|G|
burnside引理
c1(pk)是置换pk中不动点(长度为1的循环)的个数,则G中不同等价类的个数:
L=i=1gc1(pi)|G|

进入正题

Polya定理

G={p1,p2,,pg}是n个对象的一个置换群,记c(pi)为置换pi的循环节数, 用m种颜色染这n个对象,则不同的染色方案数为:
L=i=1gmc(pi)|G|
所以,计数时只需统计当循环节数为k时,对应置换有多少个即可。
假设当循环节数为k时,对应置换有a[k]个,则不同的染色方案数为:
L=i=1n(a[k]mk)|G|
当然,如果这并不是一个单纯的染色,可能涉及到一些限制时,你可以将mc(pi)替代为在置换pi下染色的方案数f(i),由于不同循环间相互独立,而同一循环中的元素染色相同,所以f(i)等于每一个循环的染色方案数的乘积。
UVA 11540 Sultan’s Chandelier 原题链接
UVA 11540 Sultan’s Chandelier 题解

推广1:母函数形式的Polya定理

如果我们已经确定了m种颜色的状态(某种颜色i染k[i]个对象),要求在这种状态下的方案数,就要用到母函数形式的Polya定理。
接下来我们用xi表示颜色i,对于某一个置换pic(pi)为置换pi的循环节数,ck(pik)为置换pi中长度为k的循环的数目。
mc(pi)P=k=1m(i=1mxik)ck(pik) 形式代替形成以x1,x2,,xm为变元的n次对称多项式P(x1,x2,,xm)
在置换pi下,颜色状态为i=1mxiki方案数即为多项式P展开后项i=1mxiki的系数。
那么,该颜色状态的方案数即为置换群G中所有置换对应的多项式展开后项i=1mxiki的系数之和。
这样说似乎有些抽象,具体实现过程可以看这里
UVA 10601 Cubes 原题链接
UVA 10601 Cubes 题解

推广2:图的计数

简单图的计数相当于对有n个无标志顶点的完全图用两种颜色进行着色的不同方案数。
首先,考虑点置换与边置换的关系:
一条边连接了两个点,那么对于这两个点,考虑他们在某个置换中的位置:
若这两个点在同一个循环中,那么边的循环的个数为点的循环的个数的一半。
若这两个点不在一个循环中,那么边的循环的个数为gcd(a,b),a,b为这两个点所在的点循环的长度。(可以画个图,看一看就知道了)
好吧,我还是,画一画吧。水平有限,应该勉强能看吧。
Polya定理
其次,考虑如何找出所有的置换:
如果n比较小,可以暴力枚举,时间为n!(点的全排列)
n比较大的时候,由于属于同一共轭类的置换对答案的贡献是相同的,所以考虑枚举一个共轭类,求出这个形式的置换的着色方案数,再乘以该形式的置换的数目,即n!i=1n(ci!ici)(ci为长度是i的循环的个数).
现在已经确定了一种点的置换的形式,那么对应的边的着色方案数如上文所说,考虑两个点是否在同一置换中即可。
例题:BZOJ 1488 图的同构
BZOJ 1488 图的同构 题解
一些题目:
比较模板的题:
The Colored Cubes UVA 10733:立方体涂色问题,基础模板,不解释。
Necklace of Beads POJ 1286:用三种颜色图一串项链的方案数。
考虑旋转和翻转,旋转就枚举旋转的长度i=1~n,循环数目就是gcd(i,n),翻转要分成两种情况:
n为偶数:选择一颗珠子,以这颗珠子到项链圆心的连线为轴翻转,置换的数目是n/2(显然,这根轴还穿过了另一颗珠子,所以是n/2),置换中循环的数目是n/2+1(两个不动置换和n/2-1个2阶置换)。或选择相邻的两颗珠子,以他们的中点到项链圆心的连线为轴翻转,置换的数目是n/2,置换中循环(2阶循环)的数目是n/2。
n为奇数:选择一颗珠子,以这颗珠子到项链圆心的连线为轴翻转,置换的数目是n,置换中循环的数目是(n+1)/2。
无论n为奇数还是偶数,所有置换的数目都是2n。
The Queen’s New Necklaces UESTC 75:用ki个颜色为i的珠子能串成多少不同的项链。
母函数形式的Polya定理,求出系数和即可。
Count the Tetris HDU 1812:用C种颜色染n*n的棋盘的方案数。
考虑旋转0度,90度,180度,270度,这道题比较困难的是要写高精度。
变式:
Magic Bracelet POJ 2888:用m种颜色染一个n颗珠子的手镯(只旋转,不翻转)的方案数,但是有限制,要求某两种颜色不能相邻。(1m10)(1n109)
如果没有限制,这道题就是个板题了,然而~~。
如果不旋转,这道题就等价于:在一个有m点的图中(一个点代表一个颜色),求从任意点开始,走n步再回到起点的方案数。图上不能相邻的两种颜色之间没有边。
由于m比较小,n比较大,所以用矩阵快速幂可以解决这个简化的问题。
现在考虑旋转:当旋转的长度为i时,循环数目就是gcd(i,n),这样的置换是唯一的,但我们可以发现不同的gcd(i,n)最多只有2n个。所以我们不妨枚举gcd(i,n),即n枚举n的因子,符合gcd(i,n)=k (i≤n) 的 i 显然有ϕ(nk)个,即循环的数目为k的置换有ϕ(nk)个。
所以,答案加上为走k步回到起点的方案数乘ϕ(nk),最后答案再除以n(有n个置换)

相关文章: