码迷,mamicode.com
首页 > 其他好文 > 详细

hdu5822 color

时间:2016-09-27 22:46:46      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

首先考虑假如是树上的做法:
考虑dp,f(i)表示对i的子树染色的方案数。
用hash可以实现查询两棵子树是否相同。
从而根据hash值排序分类,将相同的子树放在一类. (1)
f(i)等于每一类的f(p)乘起来除以此类大小size的阶乘。(2)
从而O(nlogn)求出了环周围的树的答案

然后考虑用群论求环上的答案。
等价于有tot个珠子(环上的点),每个珠子有一个颜色(子树的形状),我们说旋转x格是此问题的置换群之一,***当且仅当旋转x格后各个珠子的颜色与相应位置的要求依然吻合***。(3)
求旋转那些格数之后可以吻合可以用KMP匹配判断。
旋转x格后的不动点个数为$$\prod_{i=1}^{(tot,i)} f[p(i)]$$
(因为当子树形状相同时,必然有对应f值相同)
预处理前缀乘积,用Bunside公式计算答案即可。

hdu5822 color

标签:

原文地址:http://www.cnblogs.com/lawyer/p/5914437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!