群论:Burnside引理和Polya计数
相当抽象。
这些是看了能有点懂的文章
好文
此文章 的 <置换> 部分。
此文章 的 <群> 部分。
此文章 的 <子群> 部分。
此文章 写的很好,全文都能看。可以在上面三篇之前就看,但是内容比较简略。
此文章
写的比较好。
此文章 主要讲比较重要而且不好懂的部分。
还有一篇带图的但是找不到了。本文也会对概念作我觉得还比较形象的解释。
这个东西挺神秘的说实话我真没学明白,所以记录一下常用套路及其应用。
其实感觉主要用的是 Burnside 吧,polya倒是前者的特殊形式。
Burnside与前置
文字描述:\(X\) 关于置换群 \(G\) 的轨道数,等于 \(G\) 中每个置换下不动点的个数的算术平均数。
然后说前置内容。
一个群 \(G\) 相当于一个操作集合(但是操作是唯一的,只是操作的变量是集合),把 \(S\) 数扔进去就会按操作抛出结果,并且是有限个的,这些结果就会形成群,结果也是在 \(S\) 里的,其实可以把群想象成一张图,运算就是边 \(S\) 就是节点。
陪集就是说把这个群 \(G\) 拆出来一个子群 \(H\),然后用 \(G\) 里的元素跟 \(H\) 操作就能生产一个左/右陪集,取决于数在左边还是右边(因为不确保交换律),并且它都叫陪集了那就说明可能不是群,因为不一定有单位元。
但是目前来看群和oi还是没太大关系,所以提出置换群。现在用一个排列 \(1..n\) 和它的所有 \((n!)^2\) 个置换叫做 \(S_n\),这个东西肯定能形成一个群,然后把这个群抠出来一个子群就叫置换群(就是从一个完全图状物中扣一个子图下来)。
然后说个很潮的东西叫轨道稳定子定理。
比如给正方体六个面 \(A\) 集合上颜色集合 \(B\),面到颜色的一切映射(相当于所有染色方案)叫 \(X\),对六个面标号之后引入一个置换群 \(G\),可以认为是把这个正方体瞎翻转的所有方式。
这么举例因为置换是一个双射,换完之后颜色总数是不变的且每个元素唯一地对应一种置换结果,就可以认为是我把正方体翻了个个,面数和染的颜色肯定都没变化,只是从观察角度来讲每个角度的对应颜色变了。我肯定可以以各种姿势给正方体翻个,比如按 \(x,y,z\) 轴顺逆时针翻转 \(90,180,270\) 度,这么多操作就形成了置换群 \(G\)。
现在对于空间上来说 \(X\) 肯定有很多方案是可以转一转就变一样的,这是后话。
然后对于其中一个染色方案 \(x\in X\),规定
是 \(x\) 的轨道,就是说用所有的翻转方式 \(g\in G\) 来瞎玩这个正方体的当前染色方案 \(x\),会形成很多不在空间上考虑是不同的方案 \(\{x'\}\),这些方案集就是 \(G(x)\),就是它的轨道。
还有一些方案比较牛逼比如说这种方案 \(x\):我给正方体对侧面然同一种颜色,那你按上下/左右/前后翻转的这些操作 \(\{g\}\) 瞎玩后去观察正方体那染色方案是不变的,这时就把这些 \(g\) 叫做关于 \(x\) 的稳定子 \(G^x\)。这么来说单一颜色的方案所有翻转方法都是它的稳定子的一部分。
然后轨道稳定子定理说了一个道理:
(这个乘号就是代数乘不是 \(G\) 中定义的运算啦)
就是说,一个染色方案的所有翻转后看着不一样的方案个数和对它来说效果一样的旋转方案乘起来就是所有可用的操作了(前提是在效果上本质不同,比如按 \(x\) 顺时针翻转 90 度和按 \(x\) 逆时针翻转 270 度是一个效果,那就把它俩认为是同一个 \(G\) 中的置换)。看着很没道理但是你手玩一下正方体会发现好像真的是这么个事。这个可以用拉格朗日定理证,证明略。因为我也没太看懂
然后就可以正式开始说 Burnside 引理了。先搬下来:
\(|X/G|\) 就是说对于所有的正方体染色方案,它们用 \(G\) 瞎玩一下能得到的轨道个数,即在空间中看的本质不同方案数。
根据对于所有的轨道 \(\{Y\}\) 各自能提供 \(1\) 的贡献,把这个 \(1\) 拆分开:
熟悉定义了上面就是废话,把这个式子用刚才的轨道稳定子定理化开。
再根据定义
\(X^g\) 就是整个 \(X\) 在置换 \(g\) 下的不动点集合。
大概就是这么个东西。
Polya
其中 \(c(g)\) 表示置换 \(g\) 能分出来的轮换个数。
这个东西是有前置条件的,Polya成立当且仅当 \(X\) 是 \(A\) 到 \(B\) 的全部映射,相当于 \(X\) 得映射到全部颜色,因为只有这个时候 \(g(x)=x\) 表示对于 \(x\),所有 \(g\) 中包含的轮换的单个轮换中的所有元素映射到了 \(B\) 的同一元素,且最终覆盖 \(B\) 的全体元素,进而 \(|X^g|=|B|^{c(g)}\)。
题
先摆点置换群的题。
置换板子,因为置换一定能被表示为若干轮换的形式,所以求出每个轮换的阶求lcm即可。
不难发现每个轮换内的元素都要换至少一次,总要有一个元素换两次以上。
再进一步地,不放让那个换两次的元素一直换,每次作为一个“空位”的角色来摆正其他元素的位置。
那就出来了:对每个轮换求和并维护最小值,相加就完了...吗?
把式子写出来,不妨设轮换和为 \(sum\),轮换最小值 \(nval\),轮换大小 \(siz\)。
但是完全可以从轮换外借一个全局最小值过来,并在换完之后换回去。设这个最小值为 \(min\)
这样如果 \(siz\) 和 \(nval\) 都很而 \(min\) 很小可以用第二种方案。
取最小值即可。
pos是一个置换的形式,并且观察题目给的求法发现x,d,y本质是在钦定这个pos是哪个轮换的哪一位置。
用并查集维护同类型轮换即可。
置换构造题。
跑一下字母表的轮换,发现奇数长度的轮换可以通过链接 $i\rightarrow i+\lfloor \frac{siz}{2}\rfloor $ 实现,偶数长的轮换的话,得用两个一样长度的交叉摆放。所以偶长度轮换必须要是偶数个,判一下即可。
摆点burnside和polya。
不难发现本题中的 \(X\) 就是 \(n^n\) 中染色方案,一次置换就是把环旋转多少位。想一想对于转 \(k\) 位的置换有多少个不动点满足怎么转都一样,那应该就是 \(gcd(n,k)\)(因为不动就得循环,序列长n循环节不是n的约束怎么不动)。
进而
环上染色的常用套路大概就是这个gcd...
不动点个数还是 \(gcd(n,k)\)...,那就考虑这 \(gcd(n,k)\) 个点的放置方案,后面相当于直接复制。
f(d) 就dp吧,容斥一下
这个一眼polya就用不了了,考虑用burnside解决这个问题,考虑对每种洗牌法(置换)求出牌花色的不动点集合大小,设 \(dp_{i,j,k}\) 表示放了这么多张三种颜色牌的方案数,则对于一个 \(len\) 的轮换其内部的染色应当是相同的。
for(int id=1;id<=tot;id++)
for(int i=R;i>=0;i--)
for(int j=B;j>=0;j--)
for(int k=G;k>=0;k--){
if(i>=sav[id])dp[i][j][k]=(dp[i][j][k]+dp[i-sav[id]][j][k])%mod;
if(j>=sav[id])dp[i][j][k]=(dp[i][j][k]+dp[i][j-sav[id]][k])%mod;
if(k>=sav[id])dp[i][j][k]=(dp[i][j][k]+dp[i][j][k-sav[id]])%mod;
}
求出每个 \(dp_{r,b,g}\) 用burnside即可。
这个题显然用polya。
然后 \(f(d)\) 看一下是个矩阵乘法的形式,矩快维护dp就行了。
难。先咕咕。

浙公网安备 33010602011771号