【$Polya$定理·应用篇】$Polya$定理的几种模型简介

\(Preface\)

初步了解\(Polya\)定理之后,余便开始研究它的应用。

根据论文里的记载,整理了一下其中的例题。

似乎都是一些远古题库,其中SGU这个题库余竟未曾听说过,而且也找不到(好像已经炸了)。

前置知识

例一:【SGU294 】He's Circles

标签: 莫比乌斯反演

  • 给定一个长度为\(n\)的环。
  • 对它进行黑白染色,问有多少种本质不同的方案。
  • 可以旋转得到视为本质相同。
  • \(n\le 2\times 10^5\)

环上\(Polya\)定理的板子题。

考虑转\(i\)位置换中环的个数就是\(gcd(i,n)\),因此答案式为:

\[\frac1{|G|}\sum_{i=1}^sm^{c(g_i)}=\frac1n\sum_{i=1}^n2^{gcd(i,n)} \]

看到\(gcd\)自然而然想到莫比乌斯反演

因为莫比乌斯反演并非本文的重点,下面的式子可能会比较简略。

枚举\(gcd\)得到:

\[\frac1n\sum_{d|n}2^d\sum_{i=1}^{\frac nd}[gcd(i,\frac nd)=1] \]

容易发现后面就是一个\(\phi\)的形式,得到:

\[\frac1n\sum_{d|n}2^d\phi(\frac nd) \]

这道题应该是\(Polya\)定理最基础的应用题了。

例二:【UVA10601】Cubes

标签:立方体 组合数学

  • 给定\(12\)根木棒,每根木棒有一种颜色,且颜色总数不超过\(6\)
  • 用这些木棒拼成一个立方体,问有多少种本质不同的方案。
  • 可以旋转得到视为本质相同。
  • 数据组数\(\le60\)

余的做法

余一开始的想法,就是立方体旋来旋去太麻烦了,不如直接考虑最终结果。

假设\(1\)号点与\(2\)号点相连,只要枚举\(1\)号点的位置(\(8\)种),再枚举\(2\)号点与\(1\)号点的相对位置(\(3\)种),就能够确定旋转后的立方体了(\(8\times 3=24\)种)。

讲道理这个做法应该是正确的,然而这东西并不太好实现,一开始想手打一个表,最后嫌过于繁琐放弃了。

默默点开了题解。。。

题解的做法

考虑立方体的\(4\)种旋转方式:(本题重点!!!)

  • 不动。\(1\)种方案,每个等价类大小为\(1\)
  • 绕一组相对顶点旋转。\(4\)对顶点,每对\(2\)种方案,每个等价类大小为\(3\)(同色标出)。

  • 绕一组相对的棱转动。\(6\)对棱,每对仅\(1\)种方案,\(2\)个等价类大小为\(1\)\(5\)个等价类大小为\(2\)

  • 平行转动。\(3\)个方向,旋转\(90°\)\(270°\)时每个等价类大小为\(4\)(如图),旋转\(180°\)时每个等价类大小为\(2\)(不想画了)。

考虑这题中每种颜色的数量是定死的,因此无法直接套用\(Polya\)定理,而应该使用\(Burnside\)引理。

发现除绕一组相对的棱转动的情况以外,其余情况每个等价类大小都是相等的。

而棱的情况其实可以直接暴枚两个大小为\(1\)的等价类中的元素,则剩下的等价类大小也是相等的。

此时要计算方案数,假设等价类大小都为\(x\),如果某个\(c_i\)(颜色\(i\)的个数)不是\(x\)的倍数,显然方案数为\(0\)

否则,令所有\(c_i\)除以\(x\),设其总和为\(t\),方案数就是可重全排列\(\frac{t!}{\prod c_i!}\)

例三:【SPOJ419/SPOJ422】Transportation is (Even More) Fun

标签: 巧妙转化 莫比乌斯反演

  • 给定一个\(2^a\times 2^b\)的矩阵,要求把它变成它的转置矩阵,但保持矩阵形状不变。
  • 每次操作只能交换两个元素,问至少操作几次。
  • 询问组数\(\le100\)/询问组数\(\le4\times 10^5\)\(a+b\le10^6\)

什么?说好的\(Polya\)定理呢?为何画风突变?

把一个位置到它对应位置的转变表示成置换,然后就会发现,设这个置换有\(t\)个循环,则答案就是\(2^{a+b}-t\)

这应该非常显然,因为一个大小为\(n\)的循环只需操作\(n-1\)次。

其实呢,若把原序列中的\((i,j)\)表示成\(i\times 2^b+j\),而它在转置矩阵中对应的位置就是\(j\times 2^b+i\)

如果把\(i\times 2^b+j\)这个二进制数看成一个环,那么从\(i\times 2^b+j\)\(j\times 2^b+i\)其实就是向右转了\(b\)位。

于是经转化得到了一个新问题:

  • 给定一个长度为\(n\)的环。
  • 对它进行黑白染色,问有多少种本质不同的方案。
  • 可经每次旋转\(b\)位得到视为本质相同。

好嘞,这家伙与\(Polya\)定理板子的区别仅仅在于每次旋转\(b\)位。

一个显然的事实,旋转\(b\)位的等价类个数就是\(g=gcd(b,a+b)=gcd(a,b)\),且每个等价类大小都为\(\frac{a+b}g\)

于是可以把一个循环看成一个点,点数就是\(n=\frac{a+b}g\),颜色数目就是\(2^g\)

得到式子:(推导过程可参考例一)

\[\frac1n\sum_{d|n}(2^g)^d\times \phi(\frac nd) \]

当然别忘了最终答案是\(2^{a+b}\)减去它。

例四:【SGU282】Isomorphism

标签:无向图 除去冗余

  • 给定一个\(n\)个点的无向完全图。
  • 把每条边染成\(m\)种颜色的一种,问有多少种本质不同的方案。
  • 可以改变节点编号得到视为本质相同。
  • \(n\le 53,m\le1000\)

本题中置换群的对象就是这\(\frac{n(n-1)}2\)条边,但由于置换的数量达到\(n!\),显然不可以裸暴力。

假设点的置换是\(i\rightarrow P_i\),则边的置换就是\((i,j)\rightarrow(P_i,P_j)\)

考虑两种置换循环节个数的关系,发现:

  • 若点\(i,j\)属于同一长度为\(x\)的循环中,\((i,j)\)组成的置换中循环节个数为\(\lfloor\frac x2\rfloor\)
  • 若点\(i,j\)分别属于长度为\(x,y\)的两个循环中,\((i,j)\)组成的置换中循环节个数为\(gcd(x,y)\)

因此,如果一个点置换长度分别为\(L_1,L_2,...,L_s\),则边置换的循环节总长度就是:

\[T=\sum_{i=1}^s\lfloor\frac{L_i}2\rfloor+\sum_{i=1}^{s-1}\sum_{j=i+1}^sgcd(L_i,L_j) \]

那么就需要求满足循环节长度为\(L_1,L_2,...,L_s\)的边置换数目,也就是把\(1\sim n\)放入大小分别为\(L_1,L_2,...,L_s\)的环的方案数。

如果\(L\)互不相同,方案数就是:

\[\frac{n!}{\prod_{i=1}^sL_i} \]

而若可能有相同的\(L\),同样大小的环就会造成重复贡献。

因此假设有\(t\)种不同的值,并设\(C_i\)表示第\(i\)种值的个数,方案数就是:

\[S=\frac{n!}{\prod_{i=1}^sL_i\prod_{i=1}^tC_i!} \]

最终答案就是:(\(T,S\)的值如上所示,注意这其实是一个\(Polya\)定理的形式,只是在\(m^{c(g_i)}\)之前乘上了一个方案数)

\[\frac1{n!}\sum S\times m^T \]

这道题的核心思想就是把相似的情况放在一起讨论,除去冗余的方法在\(Polya\)计数问题中是一个很有用的优化。

参考文献

2008 - 陈瑜希《Pólya计数法的应用》

\(Postscript\)

以上就是对\(Polya\)定理几种常见模型(环、立方体、无向图)以及优化技巧(莫比乌斯反演、除去冗余)的介绍了。

余希望自己的努力能让更多人认识到\(Polya\)定理这个美丽的算法。

猜你喜欢

转载自www.cnblogs.com/Nero-Claudius/p/Polya2.html