首先发现这题虽然是边的置换,但是是由点的置换所造成的,并且发现点置换对应的所有边置换和置换操作构成置换群。

由于颜色可以全选,那么根据 Polya 定理,答案为:

\[|X / G| = \frac{1}{|G|}\sum\limits_{g \in G} |B| ^ {c(g)}
\]

注意到不同点的置换对应边置换不同,那么只需要考虑每个点置换对应边置换的贡献之和。

对于一个点置换,发现一个点循环置换内部导出子图的边一定置换到另一条也在导出子图当中的边,因此考虑分边循环置换是否在导出点循环置换导出子图内部来分类。

  • 一个点循环置换内部(大小为 \(L\))导出子图边循环置换个数为 \(\frac{L}{2}\).

以长度 \(c\) 为周期与长度 \(L - c\) 为周期本质相同。

  • 两个点循环置换导出子图之间的边置换后还在这两个点循环置换导出子图之间,并且有 \(\frac{L_1L_2}{\mathrm{lcm}(L_1, L_2)} = (L_1, L_2)\) 个边循环置换。

考虑任意一条此位置的边循环 \(\mathrm{lcm}(L_1, L_2)\) 次之后就会回到这条边。

因此对于一个循环置换大小为 \(a_1, a_2, \cdots a_k\) 的点循环置换,它的贡献为:

\[\sum\limits_{i = 1} ^ k \lfloor \frac{a_i}{2} \rfloor + \sum\limits_{i < j} (a_i, a_j)
\]

注意到数据范围较小,且只需要搜索所有划分数,因此可以直接爆搜通过。

需要注意的是,令 \(c_i\) 为大小为 \(i\) 的数选了 \(c_i\) 个,那么一种划分对应点循环置换个数为:

\[\frac{n!}{\prod\limits_{i = 1} ^ k a_i!c_i!} \prod\limits_{i = 1} ^ k (a_i - 1)! = \frac{n!}{\prod\limits_{i = 1} ^ k a_ic_i!}
\]

需要注意一些实现上的问题,比如一定要保证每一轮搜索结束都能恰好搜到一个划分,不然复杂度是划分数前缀和的,具体方法就是从大往小搜,搜到 \(1\) 的时候强制填满。

同时需要注意每次搜索不要经过不填入划分当中的数,每次枚举下一个填的数是什么。

同时每次只考虑填入多少个数来减小贡献的计算,这样至少能保证每个划分数计算的次数只有 \(len(p) \le \sqrt{n}\) 次(\(len(p)\) 为划分 \(p\) 当中本质不同的数的个数)

然后如果边填数边计算贡献,原本计算单个划分数的复杂度就可以均摊到何其前缀相同的每个划分数上,这样复杂度就是 \(\mathcal{O}(p(n))\) 其中 \(p(n)\) 为 \(n\) 的划分数。

下面这份代码大概能在 \(1s\) 内跑完 \(80\).

代码

同时贴一份划分数本质不同个数次幂和的表:这里

「SHOI2006」有色图的更多相关文章

  1. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  2. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  3. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  4. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  5. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  6. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  7. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  8. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

  9. 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy – a glance

    提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...

随机推荐

  1. request参数获取,参数校验,参数处理

    需求: 1.post接口,需要在过滤器中进行参数校验,校验通过之后再执行方法 2.原有代码中使用x-www-form-urlencoded传参,新需求要使用json格式 3.原有代码校验过滤器使用Se ...

  2. .NET5.0 依赖注入,关于 Autofac 使用

    前置 工具 VS2019 概念 关于以下几个概念,自行百度. 控制反转:IoC(Inversion of Control) 依赖注入: 容器:DI 容器(.NET Core 自带),Autofac(本 ...

  3. Elasticsearch单机安装Version7.10.1

    1.说明 Elasticsearch单机安装, 基于Elasticsearch的7.10.1版本, 在Linux上安装Elasticsearch单机, 使用安装包elasticsearch-7.10. ...

  4. CSS基础 阴影相关属性设置

    一.字体阴影属性名:text-shadow:水平偏移量 垂直偏移量 模糊度 阴影颜色: html代码: <div>农夫山泉有点甜</div>css代码: div{ font-s ...

  5. js 盒子逐渐缓慢移动效果

    注释:可以用于盒子弹出,收回效果,比如:某东的产品详情页,侧边有购物车.优惠卷等,鼠标经过弹出效果 可以看这个网址使用案例:https://www.cnblogs.com/jq-growup/p/15 ...

  6. CF858D Polycarp's phone book

    题意翻译 有 n 个长度为 9 且只包含数字字符互不相同的串. 需要对于每个串找到一个长度最短的识别码,使得这个识别码当且仅当为这个串的子串. 题目分析 因为范围不是非常大,所以可以将子串筛出来 然后 ...

  7. Microsoft HoloLens 开发(1): 搭建 HoloLens 开发环境

    1.硬件配置 64位 Windows 10 专业版, 企业版, or 教育版 (注: 家庭版不支持 Hyper-V 或者 HoloLens emulator) 64位 CPU 4核CPU (或者大于4 ...

  8. Python之路 - Day4 - Python基础4 (新版)

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  9. 通过了解Servlet和Http之间的关系,了解web中http通信使用

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512336761551585796/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...

  10. Mysql设计遵循规则

    为什么要优化系统的吞吐量瓶颈往往出现在数据库的访问速度上随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢数据是存放在磁盘上的,读写速度无法和内存相比 如何优化设计数据库时:数据库表. ...