知识:树同构判断

如何判断两个无根树是同构的??同样的我们想办法把每棵树hash成一个数字,通过数字判断是否相同就行

对于HDU5732 subway来说 http://acm.hdu.edu.cn/showproblem.php?pid=5732 (2016多校第一场的题)

10w个点如何判断同构??

题解如下:

这个题是一个树的同构判断,想办法用一个和节点顺序无关的哈希函数将树表示出来即可。 这里提供一种方法:首先求解树的中点(重心即可),

然后将中点作为根。只有一个结点的子树哈希值为 1。选一个比较大的质数P和一个特别大的质数Q。对于每一颗树,把它的所有子树的哈希

值排序。然后hash=sum(P^i∗hash[i])%Q,就能算出来总体的哈希值。有两个中点的树两个 中点都试一下。为了保险可以检查下哈希值有没有重的。

这样就可以递归hash出一棵树

对于上面那道题知道了这个,就很简单了

感悟:学无止境,应该不断增长自己的姿势

 

posted @ 2016-07-27 21:45  shuguangzw  阅读(899)  评论(0编辑  收藏  举报