这是一个c++实现的并查集模板
class Union_find {
private:
int *u;
unsigned int size;
public:
Union_find(unsigned int n) {
size = n;
u = new int[size];
memset(u, -1, sizeof(int)*size);
}
~Union_find() {
delete[] u;
}
void set_parent(int i, int p_index) {
u[i] = p_index;
}
unsigned int get_parent(int i) {
if(u[i] == -1 || u[i] == i) {
return i;
}
else {
u[i] = get_parent(u[i]);
}
return u[i];
}
unsigned int count() {
int count = 0;
for(int i = 0; i < size; i++) {
if(u[i] == -1 || u[i] == i) count++;
}
return count;
}
void union_2area(int a1, int a2) {
int a1p = get_parent(a1);
int a2p = get_parent(a2);
if(a1p != a2p) u[a2p] = a1p;
}
};