UOJ Logo Universal Online Judge

UOJ

#763. 树哈希

附件下载 统计

这是一道模板题。

给定一棵以点 1 为根的树,你需要输出这棵树中最多能选出多少个互不同构的子树。

两棵有根树 T1T2 同构当且仅当他们的大小相等,且存在一个顶点排列 σ 使得在 T1ij 的祖先当且仅当在 T2σ(i)σ(j) 的祖先。

输入格式

第一行一个正整数 n,表示树的点数。

接下来 n1 行给出树边。每行两个正整数 a,b,表示树上有一条连接点 a 和点 b 的边。

输出格式

一行一个正整数,表示最多能选出的互不同构的子树个数。

样例一

input

10
1 2
1 3
2 4
2 5
3 6
3 7
3 8
8 9
8 10

output

4

explanation

一种最优的选法是选择 1 号点、2 号点、3 号点、4 号点的子树。

限制与约定

对于所有数据,1n106

提示:由于 Hack 机制的存在,不建议使用固定的哈希模数。C++11 中一种安全的随机数生成器为 mt19937_64(chrono::steady_clock::now().time_since_epoch().count())

时间限制5s

空间限制512MB