原文链接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. Spring MVC 使用介绍(六)—— 注解式控制器(二):请求映射与参数绑定

    一.概述 注解式控制器支持: 请求的映射和限定 参数的自动绑定 参数的注解绑定 二.请求的映射和限定 http请求信息包含六部分信息: ①请求方法: ②URL: ③协议及版本: ④请求头信息(包括Co ...

  2. 通过SQL脚本来查询SQLServer 中主外键关系

    在SQLServer中主外键是什么,以及主外键如何创建,在这里就不说了,不懂的可以点击这里,这篇文章也是博客园的博友写的,我觉得总结的很好: 此篇文章主要介绍通过SQL脚本来查看Sqlserver中主 ...

  3. 设置 sql_mode

    MySQL 的 sql_mode 合理设置 sql_mode 是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入.在生产环境必须将这个值设置为严格模 ...

  4. Codeforces484 A. Bits

    题目类型:位运算 传送门:>Here< 题意:求区间\([L,R]\)内二进制中1的个数最多的那个数,如果有多解输出最小解 解题思路 想了15min就一遍A了 我们可以贪心地在\(L\)的 ...

  5. python学习日记(isinstance和issubclass)

    isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isinstance(obj, Foo) issu ...

  6. 给react-native添加图标和启动屏

    react native 项目默认是没有图标,并且启动页面只有文字.这个样子并不能算是一个完整的APP,现在就给APP加一个图标和一个适应所有屏幕尺寸的启动图,并且设置启动图遮住项目启动时候的白色闪屏 ...

  7. Day049--jQuery的文档操作和事件介绍

    今日内容 DOM操作(CRUD) js中DOM document.createElement('p') appendChild() insertBefore() removeChild() 创建元素 ...

  8. JAVA WEB开发环境与搭建

    一:jdk下载与安装 (1)官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-506665 ...

  9. Maven 学习总结 (四)之 测试

    使用Maven测试 Maven的重要职责之一就是自动运行单元测试.它通过maven-surefire-plugin与主流的单元测试框架JUnit3.JUnit4以及TestNG集成,并且能够自动生成丰 ...

  10. 第五节: Quartz.Net五大构件之Trigger的四大触发类

    一. WithSimpleSchedule(ISimpleTrigger) 1. 用途:时.分.秒上的轮询(和timer类似),实际开发中,该场景占绝大多数. 2. 轮询的种类:永远轮询和限定次数轮询 ...