$color$有色图
不想看题解的请速撤离
为防被骂灌输题解,撤离缓冲区
这里没字
$Ploya$神题一道,所以我自己做不出来,颓了一部分题解。
由于理(颓题)解不(没)深(脸)中途又拿了$std$对拍(输出中间结果并qj了自己的代码)
但是启示的确很多
按照题面意思来看,好像是点的交换,但是不是。。本题中的置换其实是边与边的置换
因为显然颜色是涂在边上的,至于点的交换可以看成接向两个点的边集的交换
但是归根到底还是先有点动再有边动,所以我们仍然考虑将通过点的置换来求出边的等价置换。
发现没有关于颜色使用的限制,所以可以使用$Polya$定理,那么只需要找循环节数量就行了
考虑一条边在什么时候会循环到自己原来的位置,从换点的角度。
直观地感到跟点循环的大小有关,比如有一个长度为$L$的点循环,有个边连接其中的两个点
可以想(猜)到这个点循环里,所有边都是等效的,也就是都在同一次数后循环回来(比如$L$)
那么一共有$C_L^2$个点对(边),每个边的循环节长度都是$L$
循环接数量就是$cnt(L)=\frac{C_L^2}{L}=\frac{L*(L-1)}{2*L}=\frac{L-1}{2}$
然而仔细思考就会发现我上一句话伪了
因为$L$为偶数时,正对着的边每过$\frac{L}{2}$就回到原来位置了
改改改
当$cnt(L)=\frac{\frac{L*(L-2)}{2}}{L}+\frac{L/2}{L/2}=\frac{L-2}{2}+1=\frac{L}{2} (L$%$2==0)$
合起来成了$cnt(L)=\lfloor \frac{L}{2} \rfloor$
这是一个点循环内部的,还有两个循环之间的呢
考虑一个循环长度为$L1$的点循环和另一个循环长度为$L2$的点循环
显然当转过$lcm(L1,L2)$次后,原来的两个点又碰到一起了
仔细思考就会发现上一句话无懈可击
然后有$L1*L2$个点对,循环节数量$cnt(L1,L2)=gcd(L1,L2)$
好,现在就是给定一个点的变换的局面,我们知道了这种局面有多少循环节
然而需要保证点是有序的,然后局面数量阶乘级别了..
如果点无序好像比较少,试着求出有序情况下的方案数.
我们假定图的形状一定,然后我们按照位置固定的顺序把图上点的序号一个个按在序列上
显然这样的话,发生任何点的交换都会使序列不同,也就不担心漏掉了
目前是$num=n!$,会重,考虑重了多少次
比如一段长度为$L1$的点循环,在序列上占有一个固定的子序列
子序列内部,不管怎么循环左右移动这个点循环还是这个循环..
这种同构,每个循环$i$都有$L_i$种,去重,目前$num=\frac{n!}{\pi L_i}$
然后点循环之间,相同长度的点循环的子序列一交换,又成了新序列,可是局面是一种局面
除掉,设长度$j$出现次数为$t_j$,则$num=\frac{n!}{\Pi L_i \Pi t_j!}$
好了现在只要找到点无序时有哪些方案就行了
这时候$n$很小的特性就有用了,可以爆搜!
试着搜一下发现其实合法状态很少,只有3e5左右
于是这题没了
其实对于我这种大弱鸡来说,这确乎是个神题..
虽然颓了题解,可是自己想不到的神仙思路就应该积累不是吗..
学到了一种数据范围的方案统计技巧
学到了一种等价类计数的思维方式,转化为较简单的置换再求回来
学会了如何去重
随机推荐
- Zookeeper 学习笔记之 Leader Election
ZooKeeper四种节点类型: Persist Persist_Sequential Ephemeral Ephemeral_Sequential 在节点上可注册的Watch,客户端先得到通知再得到 ...
- F#周报2019年第41期
新闻 .NET架构指南 美妙的WebSharper:学术刊物 .NET Core 3.0中Blazor Server的方案与性能 Mono 6.4.0发布说明 CapitolFSharp召集发言人 视 ...
- centos 7安装rac 11gR2时运行root.sh报错找不到ohas服务(ohasd failed to start)
单独在linux 7中为ohasd设置一个服务.步骤如下1. 创建服务ohas.service的服务文件并赋予权限touch /usr/lib/systemd/system/ohas.servicec ...
- 02-12 Logistic(逻辑)回归
目录 逻辑回归 一.逻辑回归学习目标 二.逻辑回归引入 三.逻辑回归详解 3.1 线性回归与逻辑回归 3.2 二元逻辑回归的假设函数 3.2.1 让步比 3.2.2 Sigmoid函数图像 3.3 二 ...
- # Ubuntu16.04安装nvidia驱动+CUDA+cuDNN
Ubuntu16.04安装nvidia驱动+CUDA+cuDNN 准备工作 1.查看GPU是否支持CUDA lspci | grep -i nvidia 2.查看Linux版本 uname -m &a ...
- 【TencentOS tiny】深度源码分析(4)——消息队列
消息队列 在前一篇文章中[TencentOS tiny学习]源码分析(3)--队列 我们描述了TencentOS tiny的队列实现,同时也点出了TencentOS tiny的队列是依赖于消息队列的, ...
- JS里面的铠甲合体!
本标题党又回来了,最近在专心研究一些JS基础性的书籍,以期把原理都了解透彻,所以写文章的频率就降了下来.但是今天我必须要来写一下子,为什么呢,因为今天周五!先说明一下JS里面的拆箱与装箱指的是JS封箱 ...
- cocos2dx 3.2 内存管理
一.引用计数(cocos2d-x3.2的Node类中用到) 概念:记录当前对象被引用的次数.当次数为0时释放. 1 . retain 与 release 每调用一次retain()使计数+1 每调用 ...
- Github 高级搜索功能
参考文章链接:https://zhuanlan.zhihu.com/p/55294261 GitHub 提供高级搜索方式. 一.明确搜索仓库标题.仓库描述.README 1.只想查找仓库名称包含XX的 ...
- vue css 深度选择器
在我们想穿透的选择器前边添加 >>> 或者 /deep/ 或者 ::v-deep. 官方地址:https://vue-loader.vuejs.org/guide/scoped-cs ...