【有限制的 Pólya+矩阵快速幂】poj2888

神题神题~~被他折磨了一下午,不过大大加深了我对 Pólya 和 Burnside 的理解。

 

初学 Pólya 和 Burnside 的时候发现数学太重口味了,背了个公式草草走人,今天为了做这道题可是费了血本把组合数学的书翻出来看,哎,都怪组合数学课上YY去了。

 

 花了1个小时的时间强啃,总算是有了些收获,小小的总结下。

 

首先是几个名词:

1.着色方案;

2.置换,置换群;

3.不动置换,对于某个着色方案,置换之后仍为自己的置换,叫不动置换;

4.稳定核,对于某种着色方案的不动置换的集合。

 

对于所有着色方案,有些是同构的,而且同构是具有传递性的,比如a和b同构,b和c同构,那么a和c是同构的。

一个比较直观的想法:所有本质不同的着色方案=∑(1/和该方案同构的方案数)。

 

因此求出每个方案与之同构的方案数就是当前的任务。

定理:与方案同构的方案数=(置换群个数)/(稳定核个数);

 

这是怎么得出来的?

假设 f 为一个置换,c 为一个着色方案,g 为 c 的一个不动置换。

∵g*c=c,f*c=f*c

∴ f*g*c=f*c

可以得,f 和 f*g 这两个置换作用在 c 上的效果是一样的。

所以和 f 置换效果一样的置换一共有(c的稳定核个数)个,对于置换群中每一个置换作用在 c 上产生的新着色方案,这些新着色方案与 c 同构,且每一个新着色方案都被重复计算了 (稳定核个数)次,所以

定理:与 c 的方案数=(置换群个数)/(稳定核个数) 得证。

 

再一步步带上去,可得

所有本质不同的着色方案=∑((稳定核个数)/(置换群个数)){所有着色方案}。

 

一一计算每一个着色方案的稳定核个数是不可取的,相反的,考虑每一个置换会是多少个着色方案的不动置换,这样就变成了我们最熟悉的式子:∑C(g)/|G|。

对于最普通的着色问题,式子就可以简化成:∑MP(g)/|G|。

 

现在回到这道题:每个置换实际上相当于是把这个环平均分成很多份(链)然后相邻的链相等就算同构。

我们需要计算的是每一个置换会是多少个着色方案的不动置换,因为是不动置换,所以分成的很多链式相等的,因此我们只需要考虑一条短链的情况就可以了。

问题转化成为:一条长度为L的链,相邻两个珠子颜色有限制,求方案数。

 

对于L很大的情况,这就是个经典的矩阵连乘的题目了。

 

因为N比较大,考虑使用欧拉函数进行优化,枚举置换的循环节个数L,那么和他等价的置换群一共有 phi(N/L)种,我们需要枚举的仅仅是N的约数个数,算法复杂度为 O(N0.5logNM3)。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值