并查集通常用来判断一组数据里面的包含关系,因此核心就是find()以及merge()两个功能
int box[10005]; void initial(int limit) { for(int i=0;i<=limit;++i) { box[i]=i; //初始化 } } int find(int index) { if(box[index]==index) { return index; } else { box[index]=find(box[index]); // 路径压缩,提高每一个节点寻找祖宗的速度 return box[index]; } } void merge(int x,int y) { int getx=find(x); int gety=find(y); if(getx!=gety) { box[gety]=getx; // 如果不是同一个祖宗,则统一将左边设为右边的祖宗 } }