首页 > 其他分享 >树哈希

树哈希

时间:2024-03-31 19:44:23浏览次数:106  
标签:哈希 int siz ull ms qwq define

这种东西看代码比说话好用。

#include<bits/stdc++.h>
#define int long long
#define ull unsigned
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)
#define pb push_back

using namespace std;

const int N=111;
const ull mask=std::chrono::steady_clock::now().time_since_epoch().count();

int ull shift(ull x) {
	x^=mask, x^=x<<13, x^=x>>7, x^=x<<17, x^=mask;
	return x;
}

int t, n, rt, siz[N]; ull hsh[N];
vector<int> to[N], heart; set<int> trees, qwq;

void dp(int x,int fa) {
	int ms=0; siz[x]=1;
	for(int y:to[x]) if(y^fa) dp(y,x), siz[x]+=siz[y], ms=max(ms,siz[y]);
	ms=max(ms,n-siz[x]);
	if(ms<=n/2) heart.pb(x);
}

void Hash(int x,int fa) {
	hsh[x]=1;
	for(int y:to[x]) if(y^fa) Hash(y,x), hsh[x]+=shift(hsh[y]);
	trees.insert(hsh[x]);
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	up(i,2,n) {
		int u, v; cin >> u >> v;
		to[u].pb(v), to[v].pb(u);
	}
	heart.clear(), dp(1,0);
	for(int rt:heart) {
		trees.clear(), Hash(rt,0);
		qwq=max(trees,qwq);
	}
	// jury hash is qwq. 
	return 0;
}

标签:哈希,int,siz,ull,ms,qwq,define
From: https://www.cnblogs.com/chelsyqwq/p/18107158

相关文章

  • LeetCode Hot100-哈希-两数之和
    题目描述:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=[2,7,1......
  • 使用OpenEuler x86_64 实现Bouncycastle SM3哈希功能
    使用OpenEulerx86_64实现BouncycastleSM3哈希功能一、安装运行环境安装java和mavensudoyuminstalljava-17-openjdksudoyuminstallmaven安装完成后,你就可以在OpenEuler上使用Maven来管理Java项目了。二、创建项目工程在项目根目录下创建pom.xml文件......
  • 代码随想录算法训练营第6天 | 哈希表
    哈希表理论基础用法:一般哈希表都是用来快速判断一个元素是否出现集合里,哈希法牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找eg:例如要查询一个名字是否在这所学校里,要枚举的话时间复杂度是O(n),但如果使用哈希表的话,只需要O(1)就可......
  • 数据结构与算法 哈希表(散列表)
    1.哈希表的引出因此,散列表的时间复杂度O(1)。当我们需要在数组里查找一个数时,就可以考虑到使用哈希表来降低时间复杂度了。2.哈希表的应用3.哈希表发生冲突时4.哈希表的性能所以,我们需要尽可能地高的填装因子和一个良好的散列函数,才能提高哈希表的性能。......
  • 什么是redis中的哈希桶、哈希冲突及解决方法
    什么是哈希桶Redis中的哈希桶是一种数据结构,用于在Redis的哈希表(如字典结构)中存储键值对。哈希桶是哈希表数组中的每个元素,可以视为一个容器或槽位,用于存放数据。在Redis中,当插入一个新的键值对时,会根据键的哈希值计算出一个索引,该索引指向特定的哈希桶。每个哈希桶可以存储多个......
  • 树哈希学习笔记
    1.作用判断一些树是否同构。2.方法2.1.具体操作这类方法需要一个多重集的哈希函数。以某个结点为根的子树的哈希值,就是以它的所有儿子为根的子树的哈希值构成的多重集的哈希值,即:\[h_u=f(\{h_v|v\inson(u)\})\]其中\(h_x\)表示以\(x\)为根的子树的哈希值,\(f\)是多重集的......
  • 07天【代码随想录算法训练营34期】 第三章 哈希表part02(● 454.四数相加II ● 383.
    454.四数相加IIclassSolution:deffourSumCount(self,nums1:List[int],nums2:List[int],nums3:List[int],nums4:List[int])->int:table=dict()foriinnums1:forjinnums2:if(i+j)intable:......
  • 十六 1402. 星空之夜 (哈希表)
    1402.星空之夜(哈希表)思路:整体方法就是使用DFS找出所有星群,难点是判断星群是否相似,这里是通过累加星群内每两点之间的距离作为哈希值判断是否相似。importjava.util.*;publicclassMain{privatestaticfinaldoubleeps=1e-8;privatestaticintW,H;......
  • 数据结构-哈希表-007
    1哈希表-通讯录1.1哈希结点结构体定义/*=====自定义数据类型=====*/typedefstructperson_information{charname[32];charsex;intage;chartel[32];charaddr[64];}DATA_TYPE;/*=====定义一个哈希数据结点=====*/typedefstructhash_......
  • 代码随想录第六天: 哈希表(数组+HashSet+HashMap)
    语言:Java参考资料:代码随想录、ChatGPT3.5当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个......