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

(Preface)

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

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

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

前置知识

例一:【SGU294 】He's Circles

标签: 莫比乌斯反演

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

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

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

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

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

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

枚举(gcd)得到:

[frac1nsum_{d|n}2^dsum_{i=1}^{frac nd}[gcd(i,frac nd)=1] ]

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

[frac1nsum_{d|n}2^dphi(frac nd) ]

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

例二:【UVA10601】Cubes

标签:立方体 组合数学

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

余的做法

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

假设(1)号点与(2)号点相连,只要枚举(1)号点的位置((8)种),再枚举(2)号点与(1)号点的相对位置((3)种),就能够确定旋转后的立方体了((8 imes 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 imes 2^b)的矩阵,要求把它变成它的转置矩阵,但保持矩阵形状不变。
  • 每次操作只能交换两个元素,问至少操作几次。
  • 询问组数(le100)/询问组数(le4 imes 10^5)(a+ble10^6)

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

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

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

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

如果把(i imes 2^b+j)这个二进制数看成一个环,那么从(i imes 2^b+j)(j imes 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)

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

[frac1nsum_{d|n}(2^g)^d imes phi(frac nd) ]

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

例四:【SGU282】Isomorphism

标签:无向图 除去冗余

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

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

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

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

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

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

[T=sum_{i=1}^slfloorfrac{L_i}2 floor+sum_{i=1}^{s-1}sum_{j=i+1}^sgcd(L_i,L_j) ]

那么就需要求满足循环节长度为(L_1,L_2,...,L_s)的边置换数目,也就是把(1sim 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_iprod_{i=1}^tC_i!} ]

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

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

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

参考文献

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

(Postscript)

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

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

原文地址:https://www.cnblogs.com/Nero-Claudius/p/Polya2.html