• ZJOI2018 树


    这道题我拖了20天才AC,特地单独写一篇题解纪念一下
    设$dp(i,j)$表示大小为i的树,构成的等价类的jk次方的和(也就是选出jk个树且全部通过方案),答案就是$dp(n,1)$
    使用状态$t(i,j,l)$表示每棵树大小<=i的有根森林,等价类的jk次幂和,树的大小和为l,则$dp(i,j)=t(i,j,i-1)$表示新添一个超级根,且这个超级根的标号为1,且所有其他点的标号+1
    得到t数组使用背包dp。从小到大枚举我们添加进的树的大小和选了多少个。假设选了p个,得到$t(i,j,l)+=c(l,p*i)^{jk}*f(i,v,j)*t(i-1,j,k-p*i)$,f(i,v,j)表示无序的选择v棵树,且每个大小为i,等价类的jk次幂和。组合数表示分配标号。
    f的计算可以使用置换群。
    设一个集合x,x内的每个元素表示一种形状的树(一种等价类,理解这点东西花了我1h...)
    所以设群G表示全体长度为n的置换,把群G作用于集合x上。实际上,全体长度为n的置换是一个置换群。所以可以使用burnside引理去重。
    实际上,这个群G的意义是,要求的是无序选择若干棵树的方案,而相乘计算的是有序的树的方案,所以要用G去重。
    实际上,每个元素的权值是每棵树选择方案数的乘积。看上去不能用burnside引理。但是在置换的作用之下,树的集合不变,所以权值不变。所以轨道内所有元素的权值都是相同的。
    把burnside引理的证明过程改一下可以发现,方案数=1/|G|*所有元素(所在轨道的权值和/轨道的大小)。
    G的大小是常数n!。(怎么2篇题解中都说的是m!....)
    实际上,为了使原方案是有序的,需要对每个集合的权值除以所有等价类的大小的阶乘的jk次方的乘积。因为有序选择大小为n的集合的方案数是(n!)^{j*k}/所有等价类的阶乘的jk次方。
    实际上可以再次把burnside引理的证明过程改一下。如果令|Orbit(x)|w(stab(x))= mul 1/(ai!)^(jk)(原来是1)
    则对于每个置换f,w(f)*w(fix(f))的和就是答案。
    坑:置换环的权值可以相乘没有懂。
    可能讲的不是很清楚。

  • 相关阅读:
    小心使用宏
    常见文件、目录、路径操作函数
    链表法页框的分配和去配
    获取调试符号文件
    Visual C++ Runtime Error 调试
    HEAP: Free Heap block XXXX modified at XXXX after it was freed
    磁盘操作 API
    【转】浅谈大型网站动态应用系统架构 Mr
    jQuery1.3.1 Tab选项卡 Mr
    spring依赖注入思想 Mr
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/12616446.html
Copyright © 2020-2023  润新知