题目链接 HDU-6647
有一棵N个点构成的无根树,我们可以任选一点开始进行dfs跑,得到一个括号序,现在我们想知道跑完整个dfs,有多少种括号序?
于是,可以比较容易的想到,我们可以推一个dp方程来解出从一个点出发,得到的方案数,假设
表示以u为子树的根节点时候的跑完下面子树的种类数,那么可以看到
,其中,
表示u的不同形态的子树的个数。
于是,我们可以根据这个式子来进行DP得到目前假设的根节点的值,然后再根据该式子可以进行换根DP得到剩下以每个点为根时候的答案值,当然,当以它为根时候的树跟其他点为根的树是同构的时候,这时只需要算一个的答案就可以了。
然后,这里的哈希值,我选用了随机数,因为一开始被卡了。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include