zoukankan      html  css  js  c++  java
  • 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))的和就是答案。
    坑:置换环的权值可以相乘没有懂。
    可能讲的不是很清楚。

  • 相关阅读:
    centos 无线网卡安装,网卡rtl8188ee
    centos mysqldb 安装
    centos 安装gcc时,出错:Found 10 pre-existing rpmdb problem(s), 'yum check' output follows:
    peewee 字段属性help_text的支持问题
    mysql查看字段注释(帮助信息)指令
    centos mysql 大量数据导入时1153 错误:1153
    php在centos下的脚本没有解析的问题
    [转]mysql分布式方案-分库拆表
    [转]Mysql海量数据存储和解决方案之一—分布式DB方案
    mysql 数据库字符集的指定
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/12616446.html
Copyright © 2011-2022 走看看