AGC024D Isomorphism Freak


2020-02-19

定义一棵树上两个点等价当且仅当以这两个点为根的有根树同构,一棵树的权值定义为这棵树的等价类个数。

给出一棵 \(n\) 个点的树,可以在这棵树基础不断的加叶子,使得最后树的权值最小,求出这个权值,以及满足之前条件的所有树中最小叶子数。

数据范围 \(n\le 100\)

我们发现其实最终所得的树只有两种,一种是以一条边为中心,左右两边同构,一种是以点为中心,呈放射状分布。

其实这两种都一样,以边为放射状的只要把这条边看成一个点就可以了。

这样我们考虑枚举中心,要求其权值,首先不难发现同构的数量其实就是以中心为根的树的深度。然后我们考虑叶子个数,我们只要想想构造这棵树的过程,其实就是把每一层深度的所有点的儿子数补成相同,那么补完后树的叶子个数就是每层非叶子节点儿子个数的乘积,对于原树来讲就是每层儿子树最多的儿子个数的乘积。

复杂度 \(\mathcal{O}(n^2)\),开 \(100\) 大概是为了不爆 long long

这里是代码

Cite this post

@misc{pu2020agc024d,
  author = {Pu, Fanyi},
  title  = {AGC024D Isomorphism Freak},
  year   = {2020},
  month  = {2},
  url    = {https://pufanyi.com/blog/agc024-d}
}