【哈希】判断有根树同构

这是一个未被验证过正确性的判断有根树同构的哈希函数。可以记忆化搜索或者dfs求得。

f(u)表示以u为根的子树的哈希值。

size(u)表示以u为根的子树的大小。

son(u)表示u的儿子数量。

chi表示u的第i个儿子。

p为种子。

O(n)。

typedef unsigned long long ull;
#define N 100001
const ull seed=127;
ull f[N],seeds[N];
void dfs(int U)
{
	size[U]=1;
	int t=0;
	for(int i=first[U];i;i=next[i])
	  {
	  	dfs(v[i]);
	  	f[U]+=f[v[i]]*seeds[size[U]-1];
	  	size[U]+=size[v[i]];
	  }
	f[U]+=seeds[size[U]-1]*(son[U]+1);
}
原文地址:https://www.cnblogs.com/autsky-jadek/p/4539500.html