原文链接www.cnblogs.com/zhouzhendong/p/Burnside-Polya.html

问题模型

  有一个长度为 $n$ 的序列,序列中的每一个元素有 $m$ 种取值。

  如果两个序列循环同构,那么我们称这两个序列等价。

  求两两不等价的序列个数。

Burnside引理

  假设有若干个置换 $P_1,P_2,\cdots$ ,设由这些置换生成的置换群为 $Q$ 。如果序列 A 可以通过一个 $Q$ 中的置换变成序列 B,那么我们认为 A 和 B 等价。

  对于一个置换 $P$ ,如果序列 A 经过置换 $P$ 之后不变,那么我们称序列 A 为置换 $P$ 的一个“不动点”。令 $C(P)$ 表示置换 $P$ 的不动点数。

  Burnside引理:

    对于一个置换群 $Q$,两两不同的序列个数为

$$\frac 1 {|Q|} \sum_{P\in Q} C(P)$$

Polya定理

  Polya定理是Burnside引理的一个具体化。

  Polya定理:

    假设置换 $P$ 由 $k$ 个轮换组成,那么

$C(P) = m^{k}$

  至此,我们已经可以解决最开始的问题模型了。

$$ans = \frac 1n \sum_{i=0}^{n-1} m ^ {\gcd(i,n)}$$

例题 - POJ2409 Let it Bead

题意

  有一种项链有 $n$ 个珠子,珠子有 $m$ 种。项链是环,但是没有起始点,也没有方向。也就是说,如果两个项链循环同构或者对称翻转后循环同构,那么他们等价。

  求不等价的项链种数。

  $n\cdot m \leq 32$ 。

题解

  这类问题,我们首先考虑一下置换群 $Q$ 中有哪些元素。

  1. 旋转。可以旋转 $0\cdots n-1$ 次,故有 $n$ 种方案。这部分等价于本文开头的问题模型。

  2. 翻转。由于任何形如 “旋转 + 翻转 + 旋转” 的操作都可以由一次翻转得到,所以本质上只有翻转操作。不管 $n$ 是奇数还是偶数,都有 $n$ 种本质不同的翻转操作,而且这些操作与之前的旋转也不同。

  所以,置换群 $Q$ 中共有 $2n$ 种置换。

  现在我们考虑求 $\sum C(P)$ 。

  对于 1. 旋转,之前已经提到,这种情况对答案的贡献就是

$$\sum_{i=0}^{n-1} m ^ {\gcd(i,n)}$$

  对于 2. 翻转,我们分 $n$ 的奇偶性进行讨论:

  n 为奇数:只能将一个顶点与其对边中点所在直线作为对称轴进行翻转:一共有 $n$ 种方案,每种方案都由 $\frac {n+1} 2$ 个轮换构成,故对答案的贡献是

$$n \cdot m ^ {\frac {n+1} 2}$$

  n 为偶数:有两种情况:

    1. 以两个顶点所在直线为对称轴进行翻转:一共有 $\frac n 2$ 种方案,每种方案都由 $\frac{n+2} 2$ 个轮换构成,故对答案的贡献是

$$\frac n2 \cdot m ^ {\frac {n+2} 2} $$

    2. 以两条边的中点所在直线为对称轴进行翻转:一共有 $\frac n 2$ 种方案,每种方案都由 $\frac{n} 2$ 个轮换构成,故对答案的贡献是

$$\frac n2 \cdot m ^ {\frac {n} 2} $$

  至此,问题解决。

代码

#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
typedef long long LL;
int n,m;
LL Pow(LL x,LL y){
LL ans=1;
for (;y;y>>=1,x*=x)
if (y&1)
ans*=x;
return ans;
}
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main(){
while (1){
cin>>m>>n;
if (!n&&!m)
break;
LL ans=0;
for (int i=0;i<n;i++)
ans+=Pow(m,gcd(n,i));
if (n&1)
ans+=Pow(m,(n+1)>>1)*n;
else {
ans+=Pow(m,n>>1)*(n>>1);
ans+=Pow(m,(n+2)>>1)*(n>>1);
}
ans/=n<<1;
cout<<ans<<endl;
}
return 0;
}

  

Burnside引理与Polya定理 学习笔记的更多相关文章

  1. 置换群和Burnside引理,Polya定理

    定义简化版: 置换,就是一个1~n的排列,是一个1~n排列对1~n的映射 置换群,所有的置换的集合. 经常会遇到求本质不同的构造,如旋转不同构,翻转交换不同构等. 不动点:一个置换中,置换后和置换前没 ...

  2. Burnside引理与Polya定理

    感觉这两个东西好鬼畜= = ,考场上出了肯定不会qwq.不过还是学一下吧用来装逼也是极好的 群的定义 与下文知识无关.. 给出一个集合$G = \{a, b, c, \dots \}$和集合上的二元运 ...

  3. Polya 定理 学习笔记

    群 群的定义 我们定义,对于一个集合 \(G\) 以及二元运算 \(\times\),如果满足以下四种性质,那我们就称 \((G,\times)\) 为一个群. 1. 封闭性 对于 \(a\in G, ...

  4. Burnside引理和Polya定理之间的联系

    最近,研究了两天的Burnside引理和Polya定理之间的联系,百思不得其解,然后直到遇到下面的问题: 对颜色限制的染色 例:对正五边形的三个顶点着红色,对其余的两个顶点着蓝色,问有多少种非等价的着 ...

  5. Burnside引理和Polya定理

    转载自:https://blog.csdn.net/whereisherofrom/article/details/79631703 Burnside引理 笔者第一次看到Burnside引理那个公式的 ...

  6. Burnside引理与polay定理

    #Burnside引理与polay定理 引入概念 1.置换 简单来说就是最元素进行重排列 是所有元素的异议映射,即\([1,n]\)映射到\([1,n]\) \[ \begin{pmatrix} 1& ...

  7. @总结 - 12@ burnside引理与pólya定理

    目录 @0 - 参考资料@ @1 - 问题引入@ @2 - burnside引理@ @3 - pólya定理@ @4 - pólya定理的生成函数形式@ @0 - 参考资料@ 博客1 @1 - 问题引 ...

  8. 【BZOJ1488】[HNOI2009]图的同构(Burside引理,Polya定理)

    [BZOJ1488][HNOI2009]图的同构(Burside引理,Polya定理) 题面 BZOJ 洛谷 题解 求本质不同的方案数,很明显就是群论这套理论了. 置换一共有\(n!\)个,考虑如何对 ...

  9. 数学:Burnside引理与Pólya定理

    这个计数定理在考虑对称的计数中非常有用 先给出这个定理的描述,虽然看不太懂: 在一个置换群G={a1,a2,a3……ak}中,把每个置换都写成不相交循环的乘积. 设C1(ak)是在置换ak的作用下不动 ...

随机推荐

  1. Django组件之Form表单

    一.Django中的Form表单介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入 ...

  2. 如何在源码里修改openwrt root密码

    root密码在etc/shadow文件里,但里边的密码是加密过后的.具体的加密方式我不清楚,应该是Linux里的一套加密算法.但要达到修改源码密码的目的,我还是想到了一个间接的办法.首先在源码里改成t ...

  3. Django+Vue打造购物网站(九)

    支付宝沙箱环境配置 https://openhome.alipay.com/platform/appDaily.htm?tab=info 使用支付宝账号进行登陆 RSA私钥及公钥生成 https:// ...

  4. 题解 AT2390 【Games on DAG】

    题目大意 给出一个n个点m条边的DAG,记为G. 可以删掉若干条边成为G′,显然有 2m 种不同的G′. 连边保证:若有 (xi →yi​) 边,则 xi​ < yi . 初始点1和点2有一个标 ...

  5. nginx安装访问

    依赖包安装: 安装gcc gcc-c++: yum -y install gcc gcc-c++ autoconf automake 安装pcre: yum -y install pcre pcre- ...

  6. java集合框架综述

    一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和 ...

  7. 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联等)

    一. 五大构件 引言: Quartz.Net的五大构件 1.  调度器:Scheduler 2.  作业任务:Job 3.  触发器: Trigger 4.  线程池: SimpleThreadPoo ...

  8. 深入浅出mybatis之映射器

    目录 概述 XML映射器 定义xml映射器 配置xml映射器 使用xml映射器 接口映射器 定义接口映射器 配置接口映射器 使用接口映射器 总结与对比 概述 映射器是MyBatis中最核心的组件之一, ...

  9. ArcGIS Server 10.0 安装及使用完整攻略

    引言 ArcGIS Server 10.0在使用和安装的过程中,需要进行比较全面的学习,才能正确使用.缺乏正确的指引,用户很容易在安装及使用中遇到问题.所以笔者在此总结Server 10.0的安装及使 ...

  10. 散度、旋度与 Laplacian

    $$\bex -\lap {\bf u}=\rot \rot {\bf u}-\n \Div {\bf u}. \eex$$