这是群论
置换群是群论的一种:
必须要知道的:
理解一下
这里置换就是旋转同构的表示,方案就是“染色方案”
m种置换,假如所有可能的方案,每种同构的方案都算了m次。(每种置换都有一次),那么直接除以m即可。
但是有的方案并没有被计算m次。例如旋转同构的11111只计算了1次。
为了都出现m次,保证能直接除法,就把少算的加上,最后除以m
burnside引理的思想就是这样。
更具体地,我们称不动点表示一个置换下置换前后不动的方案。
显然对于每个置换的不动点,那么这个不动点会在总方案中少出现一次(起码这个置换不会多一次),就要补上1
所以,
本质不同的“染色方案”,就是每个置换下不动点的个数除以置换数。
polya定理相当于一个辅助。
对于每个置换下的不动点个数提供了计算方法:
=颜色^环个数
环就是一个连等式。移动到的位置和自身必须相等。
当然,这只是对于颜色可以随便填的情况可以直接算。
对于不能随便填的情况,polya定理也给我们提供了思路:每个环每个环相对独立地考虑。
例题:
[ACM] POJ 2409 Let it Bead (Polya计数)
基础题。
置换只有n种旋转(包括元置换),和翻转。
对于翻转,奇偶讨论一下环个数即可。
旋转i次,环个数gcd(n,i),环长都是n/gcd(n,i)
ax=0 mod y 所以ax=ty=lcm(x,y) 所以a=lcm(x,y)/x=y/gcd(x,y)
每个环都相等,所以环个数:gcd(n,i)
统计不动点之和。再除以置换数
如果都是这样的题就没有意思了
出题人会在置换的枚举和不动点的计算上设计麻烦。
1.置换的枚举优化:一些置换本质上是一样的:环的种类个数都一样。对于旋转同构可以枚举gcd,对于n!的完全置换,可以自然数拆分(n不能太大<=80)
因为本身统计不动点也是和环有关系。环的组合就少了很多
2.不动点的枚举:一般还是考虑从环入手,环内部的,环之间的有时都要考虑。题目的一些要求会对每个环内颜色的填法,不是非常无脑,就要额外进行特殊处理了。经常用到dp
灵活统计
hdu 5868 Different Circle Permutation
上一题的弱化版。
[HNOI2008]Cards
好题。比较灵活运用了burnside引理和polya定理的思想。
[HNOI2009]图的同构记数
上题削弱版。
相当于每个边有两种颜色。有或者没有。
配赠福利:
二维旋转同构(旋转一行或者一列,共n×m种置换)
对于右移i个,下移j个:
环个数n×m/lcm(n/gcd(i,n),m/gcd(j,m))
枚举a=n/gcd(i,n)和b=m/gcd(j,m)
方案数乘上:phi(a)phi(b)
复杂度:O(约数个数×约数个数)
大概一个环长这样子: