并不像普通群论题,本题不考察polya,考察Burnside引理,并且巧妙的与欧拉函数,DP,矩阵快速幂结合,非常具有综合性和典型性。
Burnside 引理
方案数等于各置换不动点的平均数
这里要特别强调一下不动点,指的是整个圆在旋转之后不变,而非圆上某个点的状态。
根据群论循环置换结论
环每个点旋转i个点,所构成的循环数为gcd(i,n)
这里需要着重强调一下这 gcd(i,n)个循环究竟长什么样子。
下图中,相同颜色为一个循环,易知循环长度为3,循环内点必须满足颜色相同才能满足整个圆旋转之后成为一个“不动点”
由此我们得出第 1个点属于第一个循环,第2个点属于第二个循环,直至第n个点属于第n个循环,第n+1个点属于第一个循环。也就是说,前n个点我们就可以确定这n个循环的状态,也就是整个圆的状态,只要我们求出满足题目排斥要求的n个点的排列方案数,那么整个圆也就被确定了。
显然可以设 f[i][j]为 第i个点是j颜色的方案数,那么它由上一个点转移而来,转移方程为
其中m(i,j)是约束条件,0或者1代表是否能够相邻
但是仅仅满足这种线性关系还不够,第n个点其实是和第1个点相邻的。那么我们可以枚举第1个点的颜色,输出 f[n+1][k]即可,f[n+1][k]完全由f[n][]整体推出,除了去掉与1排斥的条件,都是相同的。这时我们求出了 C(f) = f[n+1][k] ,即不动点数
根据Burnside定理
总方案数等于
该公式有转化为欧拉函数的步骤,这里暂且将gcd=d时的C(f)记作 C(d)
这样就可以直接枚举n的因数即可,欧拉函数也可以快速求解,复杂度降低
下面集中处理C(d)
直接嵌套循环求DP数组肯定完爆