Burnside引理 && Polay定理

Burnside引理 && Polay定理

这种东西本来应该到暑假再学的......
然而cjk出的T1就考了这个东西所以就顺带学了一下。

一.Burnside引理

定义\(D(g_i)\)表示在置换\(g_i\)下的不动点个数。
定义\(L\)表示本质不同的群的个数,\(G\)表示对此群的一个置换集合,\(g_i \in G\)
那么有:
\[L = \frac{1}{|G|} \sum^{|G|}_i D(g_i)\]
嗯,把它翻译成人话:
\[本质不同的方案数 = \frac{1}{置换的个数} \sum^{置换G}_i 在置换i下不变的方案数\]
解题时关键在于先分清楚置换,然后求解每个置换先不变的方案数

二.Polay定理

定义\(f_i\)为置换\(g_i\)下循环节的个数,设\(m\)表示染料集合的大小。
那么有:\(D(g_i) = m^{f_i}\)
所以,结合上面的等式有:
\[L = \frac{1}{|G|} \sum_{i}^{|G|} m^{f_i}\]
我依旧把它翻译成了人话:
定义\(B = Mrege(A_i)\)函数表示将每个循环节内方案\(A_i\)合成,且总方案\(B\)合法的方案数
\[本质不同的方案数 = \frac{1}{置换的个数} \sum^{置换G}_i Merge(每个循环节的合法方案数)\]
怎么理解呢?都知道,不同的循环节都是相互独立的。
而对于每一个循环节,对应的所有位置的颜色都是一样的。
故一共有\(m^{f_i}\)种方案(即给每个循环节附上一个颜色),在置换\(g_i\)的作用下,仍然保持不变。

三.应用举例

这里给出\(cjk\)(2018.4.24)的考题:POJ2888 Magic Bracelet

题目描述:
本题有\(T\)组数据:
有一个大小为\(n\)的环,你需要为它们染色,一共有\(m\)种颜料可以选择。
但是这个环有\(K\)个特殊限制\((a,b)\),表示颜色\(a\),\(b\)不能相邻。 问本质不同的方案数。
两个环本质相同,当且仅当一个环可以通过旋转变为另一个环。
数据范围:\(n \leq 10^9\) ; \(m \leq 10\) ; \(K \leq \frac{m(m-1)}{2}\) ; \(T \leq 100\)

考虑 \(Burnside\)\(Polay\)
我们枚举置换:向右移动 \(i\) 下。
那么显然,一个循环节的长度为:\(lg = \frac{lcm(i,n)}{i} = \frac{n}{gcd(i,n)}\)
那么一共有\(f_i = \frac{n}{lg} = gcd(i,n)\) 个循环节。
根据\(Polay\)定理,每个循环节内部颜色相同。而每个循环节中的首个元素的位置是相邻的。
我们从每个循环节中抽出此元素,一定是一个长度为\(gcd(i,n)\)的区间。
又每个循环节内部无特殊限制,根据\(Polay\)只需要使得所有循环节的合成方案合法即可。
即取出的长度为\(gcd(i,n)\)的序列的合法方案数。
这个显然可以直接矩乘出来,定义运算结果为\(calc(Len)\)
所以:
\[Ans = \frac{1}{|n|} \sum_{i = 1}^n calc(gcd(i,n))\]
直接枚举显然复杂度有问题,观察到\(gcd(i,n)\)一定是\(n\)的约数,所以改为枚举约数\(d\)
那么就是要求\(gcd(i,n)==d\)\(i\)的个数。显然\(gcd(\frac{i}{d} \frac{n}{d})=1\),所以满足条件的\(i\)的个数就是\(\phi(\frac{n}{d})\)
所以:
\[Ans = \frac{1}{|n|} \sum_{d|n} calc(d)\phi(\frac{n}{d})\]
矩乘的时候有三个小技巧:

  • 题目相当于两个临接矩阵相乘,设\(A_{i,j}\)表示\(i\)走到\(j\)的方案数,初始值为0/1即可。
  • 保证首尾合法的方法:矩乘的时候多矩乘一次,最后只取对角线\(A_{i,i}\)的答案即可。
  • 预处理\(2^n\)矩阵,降低复杂度。

做完了,设\(E\)为枚举因数的复杂度,那么总复杂度:\(O(m^3 + 求phi + TElog(n)m^3)\)

猜你喜欢

转载自www.cnblogs.com/GuessYCB/p/9086899.html