Burnside引理:

参考自 某大佬对Burnside引理和Polya定理的讲解

相关概念

  1. 群:在数学中,群表示一个拥有满足封闭性、满足结合律、有单位元、有逆元的二元运算的代数结构。
  2. 置换群:由有限集合各元素的置换所构成的群。

一个置换的形式类似于

然后是Burnside引理:

(1)玄学描述

在一个置换群G={a1,a2,a3……ak}中,把每个置换都写成不相交循环的乘积。

设C1(ak)是在置换ak的作用下不动点的个数,也就是长度为1的循环的个数。

通过上述置换的变换操作后可以相等的元素属于同一个等价类

那么等价类的个数就等于:

即置换群中每个置换的不动点的平均数

(2)对公式的理解

eg:一正方形分成4格,2着色,有多少种方案?其中,经过转动相同的图象算同一方案。

关于转动,一共有四种置换方法,也就是|G|=4

不动(360度):a1=(1)(2)…(16)

逆时针转90度 :a2=(1)(2)(3 4 5 6)(7 8 9 10) (11 12)(13 14 15 16)

顺时针转90度 :a3=(1)(2)(6 5 4 3)(10 9 8 7)(11 12)(16 15 14 13)

转180度:a4=(1)(2)(3 5)(4 6)(7 9)(8 10)(11)(12) (13 15)(14 16)

对括号的理解: 假设转动方式(不动、逆时针转90度、顺时针转90度、转180度)为运算符+。 则+表示逆时针转90度时,括号(3 4 5 6)表示(3+4+5+6+)为一个循环,即(3+4+5+6+)=3(回到原点);

然后我们针对每一种置换的方式,找到其中的不动点,也就是只有自己的情况

由Burnside引理,共有(16+2+2+4)/4=6(种方案)

关于Burnside引理的证明

Polya定理

再提一提那个我不懂的Polya定理吧(哪天懂了回来解释)

国家集训队2001论文集 符文杰 Polya原理及其应用

Polya定理实际上是Burnside引理的具体化,提供了计算不动点的具体方法:

假设一个置换有σk">σk个循环,就是轮换

易知每个循环对应的所有位置颜色需一致,而任意两个循环之间选什么颜色互不影响。

因此,如果有m种可选颜色,则该置换对应的不动点个数为mσk">m^σk。

用其替换Burnside引理中的C(G)">C(G),即C(G)=mk">C(G)=m^k。得到等价类数目为:

现在借这道题学会运用Burnside引理

[HNOI2008]Cards(luogu)

  • Description

题目描述

小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.

进一步,小春要求染出Sr张红色,Sb张蓝色,Sg张绿色.他又询问有多少种方案,Sun想了一下,又给出了正确答案. 最后小春发明了M种不同的洗牌法,这里他又问Sun有多少种不同的染色方案.两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方法可以使用多次)洗成另一种.

Sun发现这个问题有点难度,决定交给你,答案可能很大,只要求出答案除以P的余数(P为质数).

输入格式

第一行输入 5 个整数:Sr,Sb,Sg,m,p(m<=60,m+1<p<100)。n=Sr+Sb+Sg。接下来 m 行,每行描述一种洗牌法,每行有 n 个用空格隔开的整数 X1X2...Xn,恰为 1 到 n 的一个排列,表示使用这种洗牌法,第 i位变为原来的 Xi位的牌。输入数据保证任意多次洗牌都可用这 m种洗牌法中的一种代替,且对每种

洗牌法,都存在一种洗牌法使得能回到原状态。

100%数据满足 Max{Sr,Sb,Sg}<=20。

输出格式

不同染法除以P的余数

  • Solution

运用01背包求出每一种置换(注意不动也是一种置换)的不动点个数,再运用Burnside引理求出等价类个数

  • Code
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define ll long long
using namespace std;
int s1,s2,s3,m,a[][],size[],tot,n;
ll p,f[][][],ans;
bool vis[];
ll ksm(ll a,int b)//快速幂求逆元
{
ll x=a,ans=;
while(b)
{
if(b&) ans=(ans*x)%p;
x=(x*x)%p,b>>=;
}
return ans;
}
ll Dp(int x)//01背包
{
memset(vis,false,sizeof(vis));
memset(f,,sizeof(f));
tot=;
for(int i=;i<=n;i++)
if(!vis[i])
{
vis[i]=true,size[++tot]=;
int p=i;
while(!vis[a[x][p]]) vis[p=a[x][p]]=true,size[tot]++;
}
f[][][]=;
for(int i=;i<=tot;i++)
for(int j1=s1;j1>=;j1--)
for(int j2=s2;j2>=;j2--)
for(int j3=s3;j3>=;j3--)
{
if(j1>=size[i]) f[j1][j2][j3]=(f[j1][j2][j3]+f[j1-size[i]][j2][j3])%p;
if(j2>=size[i]) f[j1][j2][j3]=(f[j1][j2][j3]+f[j1][j2-size[i]][j3])%p;
if(j3>=size[i]) f[j1][j2][j3]=(f[j1][j2][j3]+f[j1][j2][j3-size[i]])%p;
}
return f[s1][s2][s3];
}
int main()
{
scanf("%d%d%d%d%lld",&s1,&s2,&s3,&m,&p);
n=s1+s2+s3;
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
scanf("%d",&a[i][j]);
m++;
for(int i=;i<=n;i++) a[m][i]=i;
for(int i=;i<=m;i++)
ans=(ans+Dp(i))%p;//Burnside引理
printf("%lld\n",ans*ksm((long long)m,p-)%p);
return ;
}

[HNOI2008]Cards(dp,Burnside引理)的更多相关文章

  1. BZOJ 1004: [HNOI2008]Cards( 置换群 + burnside引理 + 背包dp + 乘法逆元 )

    题意保证了是一个置换群. 根据burnside引理, 答案为Σc(f) / (M+1). c(f)表示置换f的不动点数, 而题目限制了颜色的数量, 所以还得满足题目, 用背包dp来计算.dp(x,i, ...

  2. [BZOJ 1004] [HNOI2008] Cards 【Burnside引理 + DP】

    题目链接:BZOJ - 1004 题目分析 首先,几个定义和定理引理: 群:G是一个集合,*是定义在这个集合上的一个运算. 如果满足以下性质,那么(G, *)是一个群. 1)封闭性,对于任意 a, b ...

  3. [bzoj1004][HNOI2008][Cards] (置换群+Burnside引理+动态规划)

    Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红 ...

  4. BZOJ 1004 Cards(Burnside引理+DP)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1004 题意:三种颜色的扑克牌各有Sr,Sb,Sg张.给出m种置换.两种染色方案在某种置换 ...

  5. [bzoj 1004][HNOI 2008]Cards(Burnside引理+DP)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1004 分析: 1.确定方向:肯定是组合数学问题,不是Polya就是Burnside,然后题目上 ...

  6. BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的 ...

  7. BZOJ1004 [HNOI2008]Cards 【burnside定理 + 01背包】

    题目链接 BZOJ1004 题解 burnside定理 在\(m\)个置换下本质不同的染色方案数,等于每种置换下不变的方案数的平均数 记\(L\)为本质不同的染色方案数,\(m\)为置换数,\(f(i ...

  8. bzoj1004 [HNOI2008]Cards【Burnside/Polya】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1004 一道好题,但并不是好在融合了三个“考点”(计数,背包dp,逆元),其实背包dp以及求逆 ...

  9. 【BZOJ1004】【HNOI2008】Cards 群论 置换 burnside引理 背包DP

    题目描述 有\(n\)张卡牌,要求你给这些卡牌染上RGB三种颜色,\(r\)张红色,\(g\)张绿色,\(b\)张蓝色. 还有\(m\)种洗牌方法,每种洗牌方法是一种置换.保证任意多次洗牌都可用这\( ...

随机推荐

  1. slim中返回结果加密的

    //返回结果不加密 $this->get("/open]",function (Request $request, Response $response, $args) {  ...

  2. 定位、识别;目标检测,FasterRCNN

    定位: 针对分类利用softmax损失函数,针对定位利用L2损失函数(或L1.回归损失等) 人关节点检测 针对连续变量和离散变量需要采用不同种类的损失函数. 识别: 解决方案: 1.利用滑动窗口,框的 ...

  3. 解析crash

    命令行 1.查找 symbolicatecrash find /Applications/Xcode.app -name symbolicatecrash -type f 2.此时会出现一个路径 sy ...

  4. 使用springboot + druid + mybatisplus完成多数据源配置

    一. 简介 1. 版本 springboot版本为2.0.3.RELEASE,mybatisplus版本为2.1.9, druid版本为1.1.9,swagger版本为2.7.0 2. 项目地址   ...

  5. javascript DOM 编程艺术 札记1

    一个重要观点 DOM 是指 文档对象模型,它对应浏览器实际认知的东西.html 文本本身和 html 加载到浏览器中显示的东西并不是完全一致的,后者就是 DOM 节点树,它是浏览器实际认知的东西.一个 ...

  6. apache相关实验-1

    一.目录别名实验 当 apache 接受请求时,在默认情况下会将 DocumentRoot 目录中的文件送到客户端,如果想将某一不在 DocumentRoot 目录中的文件共享到网站上,并希望将它们留 ...

  7. 「洛谷P1196」「NOI2002」银河英雄传说 解题报告

    P1196 [NOI2002]银河英雄传说 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的 ...

  8. 利用自编码(Autoencoder)来提取输入数据的特征

    自编码(Autoencoder)介绍 Autoencoder是一种无监督的学习算法,将输入信息进行压缩,提取出数据中最具代表性的信息.其目的是在保证重要特征不丢失的情况下,降低输入信息的维度,减小神经 ...

  9. 计算机组成原理(下)第8章 CPU的结构和功能测试

    1.单选(1分) 以下关于指令周期的描述正确的是___ A.CPU保存一条指令的时间 B.CPU执行一条指令的时间 C.CPU取出并执行一条指令所需的全部时间 D.CPU从主存取出一条指令的时间 正确 ...

  10. spring cloud微服务快速教程之(三)声明式访问Feign、负载均衡Ribbon

    0-前言 eureka实际上已经集成了负载均衡调度框架Ribbon: 我们有了各个微服务了,那怎么来调用他们呢,一种方法是可以使用 RestTemplate(如:String str= restTem ...