$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左右
于是这题没了
其实对于我这种大弱鸡来说,这确乎是个神题..
虽然颓了题解,可是自己想不到的神仙思路就应该积累不是吗..
学到了一种数据范围的方案统计技巧
学到了一种等价类计数的思维方式,转化为较简单的置换再求回来
学会了如何去重
随机推荐
- UVA - 11400 Lighting System Design
题文: You are given the task to design a lighting system for a huge conference hall. After doing a lot ...
- 【元学习】Meta Learning 介绍
目录 元学习(Meta-learning) 元学习被用在了哪些地方? Few-Shot Learning(小样本学习) 最近的元学习方法如何工作 Model-Agnostic Meta-Learnin ...
- java架构之路-(Redis专题)Redis的主从、哨兵和集群
我们使用的redis,单机的绝对做不到高可用的,万一单机的redis宕机了,就没有备用的了,我们可以采用集群的方式来保证我们的高可用操作. 主从架构 大致就是这样的,一个主节点,两个从节点(一般两个就 ...
- java高并发----个人学习理解汇总记录
1.首先,需要理解几个概念 1.同步(Synchronous):同步方法调用一旦开始,调用者必须等到前面的方法调用返回后,才能继续后续的行为,依次直到完成所有. 2.异步(Asynchronous): ...
- shark恒破解笔记3-EAX决定胜负
PEID查壳 od载入 输入假的注册码 查找出错字符串 往上查找是否有关键跳转和关键call 可以看到此处有个je跳转 实现了跳转,并且跳过了我们注册成功的地址 网上查找这个跳转的关键call,这个c ...
- eclipse中最有用的10个快捷键
这里列出一些在使用eclipse的过程中最有用的10个快捷键,通过灵活使用这些快捷键可以提高开发效率和开发质量. 1. [ctrl+shift+r]打开资源 这可能是所有快捷键中最省时间的了.这个快捷 ...
- Halcon一日一练:阈值分割的几个算子
threshold(Image:Region:MinGray:MaxGray:) 功能:得到灰度值在最小与最大这间的那些部分.其返回仍然是一个区域. MinGray<MaxGray. 这个算子可 ...
- python中的__call__函数
简单实例: class TmpTest: def __init__(self, x, y): self.x = x self.y = y def __call__(self, x, y): self. ...
- 如何把应用程序移植到k8s
程序部署环境的容器化已经是大势所趋,微服务为容器化提供了广阔的应用舞台,k8s已经把Docker纳入为它的底层支撑容器引擎,一统江湖,成为了容器技术事实上的标准.一般的应用程序是不能直接拿来部署到容器 ...
- ESP8266开发之旅 网络篇⑩ UDP服务
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...