burnside引理&polya定理


参考资料:

《polya计数法的应用》--陈瑜希

黄学长


  1. 置换:

    置换即是将n个元素的染色进行交换,产生一个新的染色方案。

  2. 群:

    一个元素的集合G与一个二元运算(*)构成一个群。群满足以下性质:

    1. 封闭性:\(\forall a,b \in G,\exists c\in G ,c=a*b\)

    2. 结合律:\(\forall a,b,c,(a*b)*c=a*(b*c)\)

    3. 单位元:\(\exists e\in G,\forall a,a*e=e*a=a\)

    4. 逆元:\(\forall a\in G,\exists b\in G,a*b=b*a=e,b=a^{-1}\)

  3. 置换群:

    即对于置换的集合的群,其中的二元运算为置换的连接,即对一个染色方案置换后的方案进行置换。

  4. burnside引理:

    burnside引理用来求在一个置换群的置换集合下本质不同的染色方案数,公式为

    \[L=\frac{1}{|G|}\sum_j D(a_j)
    \]

    其中,L表示本质不同的染色方案数,|G|表示置换个数,\(D(a_j)\)表示在\(a_j\)置换下不变的染色方案数。

    证明的话,有兴趣的可以自己看看论文,反正我不会证。。。

  5. polya定理:

    使用burnside引理时,需要求出在某一个置换下不变的染色方案数,而在某些情况下,这种东西并不好求。

    循环:在一个置换中,形成的一个环的结构,称为循环。一个置换中的循环数称为循环节数。

    当有m种颜色时,\(D(a_j)=m^{cj}\)其中,\(c_j\)为置换的循环节数。


例题:

bzoj1004

题意为给出一个置换群,有三种颜色,每种颜色有数量限制,求本质不同的染色方案。

首先枚举每个置换。对于一个置换,在该置换下不变的元素在循环处颜色一定相同。找到该置换下的循环,做三维背包即可。

程序参考自hzwer

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int Maxn=70; int vis[Maxn],n,p,a[Maxn][Maxn],f[Maxn][Maxn][Maxn];
int r,b,g,siz[Maxn],m,ans; int powp(int a,int b,int mod) {
int ans=1;
while(b) {
if(b&1) ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
} int dp(int x) {
int cnt=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
if(vis[i]==0) {
vis[i]=1;
cnt++;
siz[cnt]=1;
int p=i;
while(vis[a[x][p]]==0) {
siz[cnt]++;
p=a[x][p];
vis[p]=1;
}
}
memset(f,0,sizeof(f));
f[0][0][0]=1;
for(int o=1;o<=cnt;o++)
for(int i=r;i>=0;i--)
for(int j=b;j>=0;j--)
for(int k=g;k>=0;k--) {
if(i>=siz[o]) f[i][j][k]=(f[i][j][k]+f[i-siz[o]][j][k])%p;
if(j>=siz[o]) f[i][j][k]=(f[i][j][k]+f[i][j-siz[o]][k])%p;
if(k>=siz[o]) f[i][j][k]=(f[i][j][k]+f[i][j][k-siz[o]])%p;
}
return f[r][b][g];
} int main() {
scanf("%d%d%d%d%d",&r,&b,&g,&m,&p);
n=r+b+g;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
m++;
for(int i=1;i<=n;i++) a[m][i]=i;
for(int i=1;i<=m;i++) ans+=dp(i);
printf("%d\n",ans%p*powp(m,p-2,p)%p);
return 0;
}

burnside引理&polya定理的更多相关文章

  1. 置换群 Burnside引理 Pólya定理(Polya)

    置换群 设\(N\)表示组合方案集合.如用两种颜色染四个格子,则\(N=\{\{0,0,0,0\},\{0,0,0,1\},\{0,0,1,0\},...,\{1,1,1,1\}\}\),\(|N|= ...

  2. Burnside引理&Pólya定理

    Burnside's lemma 引例 题目描述 一个由2*2方格组成的正方形,每个格子上可以涂色或不涂色, 问共有多少种本质不同的涂色方案. (若两种方案可通过旋转互相得到,称作本质相同的方案) 解 ...

  3. 【等价的穿越】Burnside引理&Pólya计数法

    Problem 起源: SGU 294 He's Circle 遗憾的是,被吃了. Poj有道类似的: Mission 一个长度为n(1≤n≤24)的环由0,1,2组成,求有多少本质不同的环. 实际上 ...

  4. 【uva 10294】 Arif in Dhaka (First Love Part 2) (置换,burnside引理|polya定理)

    题目来源:UVa 10294 Arif in Dhaka (First Love Part 2) 题意:n颗珠子t种颜色 求有多少种项链和手镯 项链不可以翻转 手镯可以翻转 [分析] 要开始学置换了. ...

  5. 等价类计数:Burnside引理 & Polya定理

    提示: 本文并非严谨的数学分析,有很多地方是自己瞎口胡的,仅供参考.有错误请不吝指出 :p 1. 群 1.1 群的概念 群 \((S,\circ)\) 是一个元素集合 \(S\) 和一种二元运算 $ ...

  6. hdu 5868 2016 ACM/ICPC Asia Regional Dalian Online 1001 (burnside引理 polya定理)

    Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K ...

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

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

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

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

  9. Burnside 引理与 Pólya 定理

    群 群的定义 在数学中,群是由一种集合以及一个二元运算所组成的,符合"群公理"的代数结构. 一个群是一个集合 \(G\) 加上对 \(G\) 的二元运算.二元运算用 \(\cdot ...

随机推荐

  1. 【BZOJ3786】星系探索 DFS序+Splay

    [BZOJ3786]星系探索 Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球 ...

  2. linux注意的一些地方

    assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行 #include <assert.h>void assert( int expr ...

  3. 从零打造在线网盘系统之SSH框架整合

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  4. Birt报表安装及制作

    一.Birt报表安装 二.Birt报表设置 1. file--> new --> Project 如下图所示创建报表工程. 输入工程名称后,创建完成. 2.创建报表 创建报表 完成创建. ...

  5. 【Object.prototype.toString.call()】---判断某个对象属于哪种内置类型------【巷子】

    预热:目前我们知道区分对象类型的方式有三种 :type   instanceof   Object.prototype.toString.call. 那么这三种的区别是什么呢? type 在 Java ...

  6. EasyUI +MVC +EF实现增删改查

    OA项目的框架已经搭建好了,接下来就是在这个框架下完成相应的业务的编码,接下来实现UserInfo页面的增删改查. 1.首先先谈一下遇到的一个框架上的问题:提示EF版本不一致之类的问题,主要是解决方案 ...

  7. 洛谷P3809 后缀排序【后缀数组】【模板】

    题目背景 这是一道模板题. 题目描述 读入一个长度为 nn 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置.位置编 ...

  8. 牛客网多校赛第七场A--Minimum Cost Perfect Matching【位运算】【规律】

    链接:https://www.nowcoder.com/acm/contest/145/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  9. ubuntu16.04下安装opencv-nonfree

    在写计算机视觉与导航技术的课程作业,是关于sift和surf特征的提取及匹配.因为opencv中都有直接的函数可以调用. 关于SIFT和SURF的特征在opencv的nonfree模块中,从字面意思就 ...

  10. SQL---->mySQl安装for mac

    我安装是参考如下两篇博客,但是有些不同,这里写好参考来源: http://blog.csdn.net/li_huifeng/article/details/9449685 http://www.jia ...