并查集学习:
主要思想:对一个集合进行分类,分成多个相关联的集合。
优化方法:路径压缩
int p[nMax];
void init()
{
for(int i=0;i<nMax;p[i]=i,i++);
}
int find_set(int a)
{
return p[a]==a?a:p[a]=find_set(p[a]);//状态压缩:p[a]=find_set(p[a])
}
void make_set(int a,int b)
{
p[find_set(a)]=find_set(b);//这样可以提高效率
}
bool is_set(int a,int b)
{
return find_set(a)==find_set(b);
}