首页 > 其他分享 >树哈希& 最小表示法

树哈希& 最小表示法

时间:2022-10-17 20:00:45浏览次数:47  
标签:int LL 最小 表示法 fa vs 哈希 now mod

1.把深度 和 子树大小 全部考虑到的树哈希,

LL hashx(int x, int fa, int dep) {
    if (sz[x] == 1) return 1;
    vector<LL > vs; LL ans = h[dep] % mod;
    for(int i = head[x]; i; i = e[i].next) {
        int y = e[i].y;
        if (y == fa) continue;
        vs.push_back(hashx(y, x, dep + 1));
    }
    sort(vs.begin(), vs.end()); LL now = 1, p = 0;
    for(int i = 0; i < vs.size(); ++i)
        p = (p + vs[i] * now % mod) % mod, now = now * 131 % mod;
    return ans * p % mod;
}

h[x] = 9973^x % mod

2.  最小表示法

void dfs(int u,int fa)
{
	int sum=0;
	for(int i=head[u];i!=-1;i=nxt[i])
	{
		int v=to[i];
		if(v!=fa)
		  dfs(v,u);
	}
	for(int i=head[u];i!=-1;i=nxt[i])
	{
		int v=to[i];
		if(v!=fa)
		{
			p[++sum]=hash[v];
		}
	}
	hash[u]='(';
	sort(p+1,p+sum+1);
	for(int i=1;i<=sum;++i)
	  hash[u]+=p[i];
	hash[u]+=')';
}

 

标签:int,LL,最小,表示法,fa,vs,哈希,now,mod
From: https://www.cnblogs.com/Alphaban/p/16800403.html

相关文章