zoukankan      html  css  js  c++  java
  • $color$有色图

      不想看题解的请速撤离

      这里没字

      按照题面意思来看,好像是点的交换,但是不是。。本题中的置换其实是边与边的置换

      因为显然颜色是涂在边上的,至于点的交换可以看成接向两个点的边集的交换

      但是从边根本无法入手,所以我们仍然考虑将通过点的置换来求出边的等价置换。

      

      发现没有关于颜色使用的限制,所以可以使用$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} floor$

      这是一个点循环内部的,还有两个循环之间的呢

      考虑一个循环长度为$L1$的点循环和另一个循环长度为$L2$的点循环

       显然当转过$lcm(L1,L2)$次后,原来的两个点又碰到一起了

      仔细思考就会发现上一句话无懈可击

      然后有$L1*L2$个点对,循环节数量$cnt(L1,L2)=gcd(L1,L2)$

      好,现在就是给定一个点的变换的局面,我们知道了这种局面有多少循环节

      然而需要保证点是有序的,然后局面数量阶乘级别了..

      点无序比较少,试着用无序方案数求出有序情况下的方案数,则要乘上一个系数

      我们假定图的形状一定,然后我们按照位置固定的顺序把图上点的序号一个个按在序列上

      显然这样的话,发生任何点的交换都会使序列不同,也就不担心漏掉了

      目前是$num=n!$,会重,继续考虑

      比如一段长度为$L1$的点循环,在序列上占有一个固定的子序列

      子序列内部,不管怎么循环左右移动这个点循环还是这个循环..

      这种同构,每个循环$i$都有$L_i$种,去重,目前$num=frac{n!}{prod L_i}$

      然后点循环之间,相同长度的点循环的子序列一交换,又成了新序列,可是局面是一种局面

      除掉,设长度$j$出现次数为$t_j$,则$num=frac{n!}{prod L_i prod t_j!}$

      好了现在只要找到点无序时有哪些方案就行了

      这时候$n$很小的特性就有用了,可以爆搜。

      试着搜一下发现其实合法状态很少,只有3e5左右

      于是这题没了

      

      

      

      其实对于我这种大弱鸡来说,这确乎是个神题..

      虽然颓了题解,可是自己想不到的神仙思路就应该积累不是吗..

      学到了一种数据范围的方案统计技巧

      学到了一种等价类计数的思维方式,转化为较简单的置换再求回来

      学会了如何去重

  • 相关阅读:
    【设计模式】模板模式
    【设计模式】适配器模式
    【设计模式】观察者模式
    【设计模式】原型模式
    【设计模式】建造模式
    【Android Studio】Android Studio 安装及设置
    【设计模式】工厂模式(静态工厂模式、工厂方法模式、抽象工厂模式)
    【Linux高级驱动】LCD logo
    【Linux高级驱动】LCD驱动框架分析
    【系统移植】JNI
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/11632236.html
Copyright © 2011-2022 走看看