并查集模板 这是一个c++实现的并查集模板 这是一个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; } };